尝试实现Comparable时出错

时间:2012-10-29 19:56:41

标签: java

我在用户类中一直收到此错误:

User is not abstract and does not override abstract method compareTo(User) in Comparable

我不确定它是什么意思或做些什么才能让它发挥作用。我确实看过其他类似的帖子,但并不真正了解这些回复,因为他们大部分时间都是针对别人的代码。如果需要,我可以提供有关我正在尝试做的更多信息。

public class User implements Comparable < User > {

    private String firstName;
    private String surname;
    private int booksOut;

    User(String inFirstName, String inSurname, int inBooksOut){
        this.firstName = inFirstName;
        this.surname = inSurname;
        this.booksOut = inBooksOut;
    }

    //...

}

我本质上在做什么我正在从LinkedList创建SortedLinkedList类,我在那里使用compareTo添加方法,在添加时按升序对数据进行排序。 所以当我打电话时

 User user1= new User("Dan", "Hill", 0); 
SortedLinkedList LibraryUser = new SortedLinkedList(); 
LibraryUser.add(user1);  

它创建保存在已排序链接列表中的新对象。

5 个答案:

答案 0 :(得分:3)

你让你的类实现了一个接口,但实际上没有实现它的方法。

您需要使User成为一个抽象类(以便它的具体子类需要实现接口方法)或在User类中实现该方法。

答案 1 :(得分:3)

当你的类实现一个接口时,它必须实现在那个接口中声明的方法,你没有这样做。 你必须实现Comparable接口的compareTo(T o)方法。 查看可比较的API

public class User implements Comparable < User > {

   public int compareTo(T o){

    }
}

答案 2 :(得分:2)

您的类被声明为实现Comparable接口,但它不提供此接口中方法的实现。

您需要为compareTo(User anotherUser)方法提供实施。例如:

public int compareTo(User anotherUser) {
    String thisFullName = firstName + lastName;
    String anotherFullName = anotherUser.getFirstName() + anotherUser.getLastName();
    return thisFullName.compareTo(anotherFullName);
}

答案 3 :(得分:0)

这是Comparable上的javadoc。 http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html

Comparable有一个方法签名:

public int compareTo(T object);

将此代码添加到您的用户类以使其正常工作:

public int compareTo(User u) {
// code to compare this user with u
// i'd recommend comparing the last names, then the first names
}

答案 4 :(得分:0)

当您实现Comparable时,java会查找compareTo

的实现

例如:

(请注意,为简单起见,我公开了变量)

public class User implements Comparable < User > {

    public String firstName;
    public String surname;
    public int booksOut;

    User(String inFirstName, String inSurname, int inBooksOut){
        this.firstName = inFirstName;
        this.surname = inSurname;
        this.booksOut = inBooksOut;
    }

    public int compareTo(User cmp) {
        int fnCmp = firstName.compareTo(cmp.firstName);
        if (fnCmp != 0) return(fnCmp);
        int snCmp = surname.compareTo(cmp.surname);
        if (snCmp != 0) return(snCmp);
        return(cmp.booksOut-booksOut);
    }   
}