2009-05-09 6 views
1

Nur ein kleines Problem mit Arraylist. Ich möchte ein ArrayList<Client> namentlich sortieren.Wie implementiere ich einen Comparator mit Generics?

Class Client{ String name; int phonenumber ..} 

Dieser Code macht die Arbeit, aber ich bin eine Compiler-Warnung mit: „verwendet unkontrolliert oder unsichere Operationen“. Was ist das Problem?

public void sortByName(){ 
    Collections.sort(ListofClients, new NameComparator()); 
} 

Mein Komparator sieht wie folgt aus:

public class NameComparator implements Comparator{ 
    public int compare(Object client1, Object client) { 
    String name1 = ((Client) client1).getName(); 
    String name2 = ((Client) client2).getName(); 

    return name1.toUpperCase()).compareTo(name2.toUpperCase(); 
    } 
} 

Wenn ich "implements Comparator<Client>" erhalte ich einen Fehler: „NameComparator kein abstrakt ist und überschreibt nicht abstrakte Methode vergleichen (Client, Client) in java.util.Comparator. ist mein Komparator falsch? leid für diese Noob Frage, neu in Java

+0

nur Ergebnis sofort zurückgeben :) – willcodejavaforfood

+0

@bruno Beachten Sie, dass Ihr Comparator keine Nullnamen behandelt. – McDowell

+0

Warum sollte es, wenn ein gültiges Client-Objekt keinen Null-Namen haben kann. –

Antwort

11

Nachdem Sie implement Comparator<Client> Sie ändern müssen:

public int compare(Object client1, Object client) 
{ 
    ... 
} 

zu diesem

public int compare(Client client1, Client client) 
{ 
    // Now you don't have to cast your objects! 
} 

dies ist alles, da die Definition des Vergleichers

public interface Comparator<T> 
{ 
    public compare(T o1, T o2); 
} 

Beachten Sie, wie der generische Parameter T im Methodennamen angezeigt wird.

Eine IDE wie Eclipse/Netbeans/IntelliJ hilft in dieser Situation.

+0

vielen dank, es hat funktioniert! –

3

ich Ihre Liste der Kunden davon ausgehen, ist von der Art

List<Client> 

, in dem Fall, dass Ihr Komparator sollte Comparator<Client>, und führen Sie die entsprechenden Vergleich der Typ sein (mit Namen, in diesem Fall)

Verwandte Themen