2012-10-29 7 views
3

Je continue à obtenir cette erreur dans ma classe d'utilisateur:erreurs tout en essayant de mettre en œuvre Comparable

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

Je ne suis pas sûr de ce que cela signifie ou ce qu'il faut faire pour le faire fonctionner. J'ai regardé d'autres articles similaires, mais je ne comprends pas vraiment les réponses, car ils sont la plupart du temps spécifiques au code de quelqu'un d'autre. Je peux fournir plus d'informations sur ce que j'essaie de faire si nécessaire.

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

    //... 

} 

Ce que je suis en train de faire l'essentiel, je suis en train de créer la classe SortedLinkedList de LinkedList et j'ajouter méthode là-dedans qui utilise compareTo, pour commander les données dans l'ordre croissant comme ils sont ajoutés. Alors, quand je l'appelle

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

Il crée nouvel objet qui est enregistré dans la liste chaînée triée.

Répondre

0

Lorsque vous implémentez Comparable, java cherche la mise en œuvre de compareTo

Par exemple:

(S'il vous plaît noter que j'ai rendu les variables publiques pour la simplicité)

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); 
    } 
} 
+0

Merci beaucoup maintenant je comprends! – Tom

3

Votre classe a implémenté une interface mais n'a pas implémenté ses méthodes.

Vous devez soit faire de l'utilisateur une classe abstraite (de sorte que les sous-classes concrètes de celui-ci devront ensuite implémenter la méthode d'interface) ou implémenter la méthode dans la classe User.

2

Votre classe est déclarée pour implémenter l'interface Comparable, mais elle ne fournit pas d'implémentation pour les méthodes de cette interface.

Vous devez fournir une implémentation pour la méthode compareTo(User anotherUser). Par exemple:

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

Lorsque votre classe implémente une interface, il doit mettre en œuvre les méthodes déclarées dans cette interface, que vous ne faites pas. vous devez implémenter la méthode compareTo (T o) de l'interface comparable. regardez le API pour comparable.

public class User implements Comparable <User> { 

    public int compareTo(T o){ 

    } 
} 
0

Voici le javadoc sur Comparable. http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html

Comparable a une signature de la méthode:

public int compareTo(T object); 

Ajouter ce code à votre classe d'utilisateur pour le faire fonctionner:

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