我正在编写一个程序,它必须覆盖Comparable中的CompareTo()才能使Collections.sort()工作。因为我正在使用由Assistants组成的ArrayList,我必须根据名称进行排序。
我环顾了论坛,发现并试图改变
public class Assistant{
至
public class Assistant implements Comparable<Assistant>{
作为回报,它允许我在另一个类中使用Collections.sort()并且不会警告我任何错误,但是,会出现两个新错误。
首先,在同一行
public class Assistant implements Comparable<Assistant>{
它告诉我“它不是抽象的,也不会覆盖Comparable中的compareTo(助手)。”当我去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(对象)和在助手中的compareTo(助手)具有相同的擦除,但都不会覆盖另一个。”
我有点理解这个问题,我没有重写原来的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;
}
}
这是因为具有Assistant
类型的可比较
更改
public int compareTo(Object o2)
至,
public int compareTo(Assistant o2)
对于已经正确陈述的实现将如何编译的示例,我将添加一些规则供您记住关于重写方法:
数字4解释了为什么需要将参数类型从Object更改为Assistant以便成功覆盖compareTo()方法。