3

我在我的用户类中不断收到此错误:

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);  

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

4

5 回答 5

3

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

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

于 2012-10-29T19:57:50.873 回答
3

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

public class User implements Comparable < User > {

   public int compareTo(T o){

    }
}
于 2012-10-29T19:58:31.857 回答
2

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

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

public int compareTo(User anotherUser) {
    String thisFullName = firstName + lastName;
    String anotherFullName = anotherUser.getFirstName() + anotherUser.getLastName();
    return thisFullName.compareTo(anotherFullName);
}
于 2012-10-29T19:57:57.490 回答
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
}
于 2012-10-29T20:02:58.203 回答
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);
    }   
}
于 2012-10-29T20:05:58.420 回答