Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 排序问题无法实例化覆盖compareTo()方法的抽象对象_Java - Fatal编程技术网

Java 排序问题无法实例化覆盖compareTo()方法的抽象对象

Java 排序问题无法实例化覆盖compareTo()方法的抽象对象,java,Java,我试图建立一个新的排序标准,在本例中是按名称。 调用排序方法时,我遇到了一个错误 这是包“package”中的一个独立类(SortByName): -----------------------类SortByName--------------------------- 包装 导入java.util.* 公共抽象类SortByName实现了Comparator{ public int compareTo(Object o1, Object o2){ String n1 = ((Ficha

我试图建立一个新的排序标准,在本例中是按名称。 调用排序方法时,我遇到了一个错误

这是包“package”中的一个独立类(SortByName):

-----------------------类SortByName---------------------------

包装

导入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,新建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);
}