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

时间:2009-11-22 16:00:36

标签: java

我正在尝试建立一个新的排序标准,在这种情况下是按名称。 当我调用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() );

“package.SortByName是抽象的,>无法实例化”

我尝试在类定义(SortByName)中更改“abstract”类型,但它不会覆盖compareTo()方法。

感谢阅读。

5 个答案:

答案 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()。

非常感谢劳拉,问题解决了!!!!

相关问题