我正在开发一个程序,该程序必须重写Comparable中的CompareTo()以使Collections.sort()工作。因为我正在使用由助手组成的ArrayList,所以我必须根据名称进行排序。
我浏览了论坛,发现并尝试更改
public class Assistant{
Run Code Online (Sandbox Code Playgroud)
至
public class Assistant implements Comparable<Assistant>{
Run Code Online (Sandbox Code Playgroud)
作为回报,它使我可以在另一个类中使用Collections.sort(),并且不会警告我任何错误,但是会出现两个新错误。
首先,在同一行
public class Assistant implements Comparable<Assistant>{
Run Code Online (Sandbox Code Playgroud)
它告诉我“它不是抽象的,并且不会覆盖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;
}
}
Run Code Online (Sandbox Code Playgroud)
(助手的构造函数仅包含名称)。
但是,在这个地方我在@Override中出错:“方法不会覆盖或实现超类型的方法”。
在下一行
public int compareTo(Object o2){
Run Code Online (Sandbox Code Playgroud)
我收到另一个错误(与上一个相关),该错误告诉我:“名称冲突:Assistant中的compareTo(Object)和Assistant中的compareTo(Assistant)具有相同的擦除,但是两者都不能覆盖另一个。”
我有点理解问题,我没有覆盖原始的compareTo()。
我是Java的新手,因此,如果有人发现问题,如果您也能解释我做错了(或遗漏了),我将不胜感激。
谢谢 :)
这是因为您已参数化Comparable(类型参数为Assistant)。这应该做到(我已经简化了一点):
@Override
public int compareTo(Assistant o){
return this.name.compareTo(o.name);
}
Run Code Online (Sandbox Code Playgroud)