我正在尝试建立一个新的排序标准,在这种情况下是按名称。 当我调用sort方法时,我遇到了一个错误...
这是包“package”中的分离类(SortByName):
----------------------- CLASS SortByName ---------------------- -----
包裹包裹;
import java.util。*;
公共抽象类SortByName实现Comparator {
public int compareTo(Object o1, Object o2){
String n1 = ((Ficha)o1).getName();
String n2 = ((Ficha)o2).getName();
return n1.compareTo(n2);
然后在ActionPerformed事件中我有这个:
----------------在行动事件按钮-------------------------- -
Collections.sort(list, new SortByName() );
我尝试在类定义(SortByName)中更改“abstract”类型,但它不会覆盖compareTo()方法。
感谢阅读。
答案 0 :(得分:6)
您必须实施的方法称为compare
,而不是compareTo
。
无法实例化抽象类。
此外,Comparator
是通用的,因此您最好执行以下操作:
public class SortByName implements Comparator<Ficha>{
public int compareTo(Ficha f1, Ficha f2){
String n1 = f1.getName();
String n2 = f2.getName();
return n1.compareTo(n2);
}
}
答案 1 :(得分:3)
比较器需要实现compare(),而不是compareTo()方法。
答案 2 :(得分:3)
class SortByName implements Comparator<Ficha>{
@Override
public int compare(Ficha o1, Ficha o2) {
String n1 = o1.getName();
String n2 = o2.getName();
return n1.compareTo(n2);
}
}
答案 3 :(得分:0)
你需要删除“abstract”并实现equals方法。
代码应如下所示:
package package;
import java.util.*;
public class SortByName implements Comparator{
public int compare(Object o1, Object o2){
String n1 = ((Ficha)o1).getName();
String n2 = ((Ficha)o2).getName();
return n1.compareTo(n2);
}
public boolean equals(Object o1) {
// code which compares the current comparator (!) with the object given
}
请注意,如果针对支持泛型的java版本进行编译,则可能需要使用专门的比较器。不确定这是否正确,但我认为你可以这样做:
public class SortByName implements Comparator <Ficha> {
public int compare(Ficha o1, Ficha o2){
// comparing code here
}
}
但是,再一次,不完全确定那部分,你需要稍微测试一下。
如果你查看了Comparator API,它将解释你必须如何实现平等。
另请注意,Comparator界面定义compare
,而不是compareTo
。
答案 4 :(得分:0)
劳拉你是对的我必须添加equals方法。(你错过了返回值) 同样在类定义中删除“abstract”。 并将compareTo()更改为compare()。
非常感谢劳拉,问题解决了!!!!