联系人不能转换为java.lang.Comparable

时间:2014-02-19 09:04:34

标签: java

我一直在努力发现我的错误,但无济于事。有人能帮我吗? 我确信我正在比较正确的对象

    Contact[] sortedList = myContactList.sortContactsByName();
    for (Contact c : sortedList) {
        // TODO using this line means you need to implement what in Contact class?
        // Hint: You need to override a method inherited from Object.

        System.out.println(c);
    }
}



public Contact[] sortContactsByName() {
    Contact[] contactArray = contacts.toArray(new Contact[contacts.size()]);
    // TODO Contact class has to implement Comparable
    // interface for this to work!

    Arrays.sort(contactArray);
    // Don't bother how it works now, sorting in Java
    // will be covered later on.
    return contactArray;
}

}

public int compareTo(Contact o1){

    return this.name.compareTo( o1.name);

4 个答案:

答案 0 :(得分:2)

您必须声明班级Contact才能实施Comaprable

class Contact implements Comparable<Contact> {

如果没有此声明,仅仅实施compareTo是不够的。最好将@Override注释置于compareTo之上。

答案 1 :(得分:1)

您要使用Comparable接口的类必须实现它。

class Contact implements Comparable

然后,您可以在Contact类中实现以下方法。您必须记住,这是第一个在同一类型的另一个对象上调用compareTo的对象。所以你不能直接在参数中访问name的私有变量,使用getter。

public int compareTo(Contact o1){ 
    return this.name.compareTo(o1.getName());
}

答案 2 :(得分:1)

@ user3327196:您必须为Contact类实现Comparable接口。 代码如下:

public class Contact implements Comparable<Contact> {

    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public int compareTo(Contact contact){
        return this.name.compareTo(contact.name);
    }

}

答案 3 :(得分:0)

你的问题有两种解决方案,第一种是大多数人在这里描述的,让你联系实现Comparable界面,这种方法很好,但它有一些限制,即如果你想有两个列表与你的联系人,一个按名字排序的名字排名第二,你不能用这种方法做到这一点

幸运的是,方法sort将自定义比较器作为参数,使用此解决方案,您的类不需要comparable,您需要做的就是创建自定义比较器,即

public class Contact{
 private String name;

public static final Comparator<Contact> BY_NAME_ASC = new Comparator<Contact>() {

    @Override
    public int compare(Contact o1, Contact o2) {
        return o1.name.compareTo(o2.name);
    }
};

}

现在,您需要对数组进行排序所需的全部内容是Arrays.sort(contactArray,Contact.BY_NAME_ASC);