Java 排序问题无法实例化覆盖compareTo()方法的抽象对象
我试图建立一个新的排序标准,在本例中是按名称。 调用排序方法时,我遇到了一个错误 这是包“package”中的一个独立类(SortByName): -----------------------类SortByName--------------------------- 包装 导入java.util.* 公共抽象类SortByName实现了Comparator{Java 排序问题无法实例化覆盖compareTo()方法的抽象对象,java,Java,我试图建立一个新的排序标准,在本例中是按名称。 调用排序方法时,我遇到了一个错误 这是包“package”中的一个独立类(SortByName): -----------------------类SortByName--------------------------- 包装 导入java.util.* 公共抽象类SortByName实现了Comparator{ public int compareTo(Object o1, Object o2){ String n1 = ((Ficha
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,新建SortByName())
“package.SortByName是抽象的,>无法实例化”
我尝试更改类定义(SortByName)中的“abstract”类型,但它符合不重写compareTo()方法的要求
感谢阅读。您需要删除“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
}
}
公共类SortByName实现了Comparator{
公共整数比较(Ficha o1,Ficha o2){
//在这里比较代码
}
}
但再一次,在这一点上还不能完全确定,你需要对它进行一点测试
如果您查看了,这将解释您必须如何实现equals
还要注意,比较器接口定义了
compare
,而不是compareTo
必须实现的方法称为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);
}
}
公共类SortByName实现了Comparator{
公共整数比较(Ficha f1、Ficha f2){
字符串n1=f1.getName();
字符串n2=f2.getName();
返回n1。比较到(n2);
}
}
Comparator需要实现compare(),而不是compareTo()方法。类SortByName实现Comparator{
@凌驾
公共整数比较(Ficha o1,Ficha o2){
字符串n1=o1.getName();
字符串n2=o2.getName();
返回n1。比较到(n2);
}
}劳拉,你说得对,我不得不添加equals方法。(你错过了返回值) 同时删除类定义中的“抽象”。 并将compareTo()更改为compare()
非常感谢劳拉,问题解决了为什么比较器需要等于…?-1,这里的方法名称也错误-compareTo而不是CompareEyes我刚才注意到并进行了适当编辑。我不认为这是一个-1的理由好吧,这是问题的核心。这也是因为实现“平等”不是“必须”的。但是我现在撤销了-1,-1,不需要equals,因为Collections.sort不需要与equals一致的比较器。此外,比较器是一致的,如果它所比较的对象的equals方法在compare返回0.+1时返回true,这是正确的后Java 1.5实现该接口的方法。
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);
}