[英]compareTo() method is not overriding default method when using Comparable interface
[英]Problems with overriding compareTo() in interface Comparable
我正在開發一個程序,該程序必須覆蓋 Comparable 中的 CompareTo() 才能使 Collections.sort() 工作。 因為我正在使用由助手組成的 ArrayList,所以我必須根據名稱對其進行排序。
我環顧了論壇,發現並嘗試更改
public class Assistant{
到
public class Assistant implements Comparable<Assistant>{
作為回報,我可以在另一個類中使用 Collections.sort() 並且不會警告我任何錯誤,但是會出現兩個新錯誤。
首先,在同一行
public class Assistant implements Comparable<Assistant>{
它告訴我“它不是抽象的,也不會覆蓋 Comparable 中的 compareTo(Assistant)”。 當我轉到我創建的 compareTo() 時:
@Override
public int compareTo(Object o2){
Assistant m2 = (Assistant) o2;
if(this.name.compareTo(m2.name) == 0){
return 0;
}else if(this.name.compareTo(m2.name)<0){
return -1;
}else{
return 1;
}
}
(助手的構造函數中只有名稱)。
但是,在這個地方我在@Override 中有一個錯誤:“方法沒有覆蓋或實現超類型的方法”。
在下一行
public int compareTo(Object o2){
我收到另一個錯誤(與上一個錯誤相關)告訴我:“名稱沖突:Assistant 中的 compareTo(Object) 和 Assistant 中的 compareTo(Assistant) 具有相同的擦除,但兩者都沒有覆蓋另一個。”
我有點理解這個問題,我沒有覆蓋原來的 compareTo()。
我是 Java 的新手,因此如果有人發現問題,如果您也能解釋我做錯了什么(或遺漏了什么),我將不勝感激。
謝謝:)
這是因為您已經參數化了Comparable
(類型參數是Assistant
)。 應該這樣做(我已經簡化了一點):
@Override
public int compareTo(Assistant o){
return this.name.compareTo(o.name);
}
由於您正在實施 Comparable,因此您的 compareTo() 方法需要一個 Assistent 類型的參數。
所以使用它應該有效:
@Override
public int compareTo(Assistent m2) {
if(this.name.compareTo(m2.name) == 0){
return 0;
}else if(this.name.compareTo(m2.name)<0){
return -1;
}else{
return 1;
}
}
這是因為有 Comparable 類型的Assistant
改變
public int compareTo(Object o2)
到,
public int compareTo(Assistant o2)
對於已經正確說明如何編譯實現的示例,我將添加一些規則供您記住有關覆蓋方法的規則:
數字 4 解釋了為什么需要將參數類型從 Object 更改為 Assistant 以使其成功覆蓋 compareTo() 方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.