2009-05-09 13 views
1

Arraylistの小さな問題です。私は名前でArrayList<Client>をソートしたいと思います。Genericsを使用してコンパレータを実装するにはどうすればよいですか?

Class Client{ String name; int phonenumber ..} 

このコードでは動作しますが、「未チェックまたは安全でない操作が使用されています」という警告が表示されます。どうしたの?

私のコンパレータは、このようになります
public void sortByName(){ 
    Collections.sort(ListofClients, new NameComparator()); 
} 

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

私は「implements Comparator<Client>」を使用する場合、私はエラーを取得:「NameComparatorは抽象的ではなく、抽象メソッドがで(クライアント、クライアント)を比較上書きされることはありませんjava.util.Comparatorは。私のコンパレータ間違ってますか?Javaの

+0

結果をすぐに返します:) – willcodejavaforfood

+0

@brunoコンパレータはnull名を処理しません。 – McDowell

+0

有効なClientオブジェクトにヌル名を付けることができない場合、なぜそれが必要ですか? –

答えて

11

を適切な比較を行います。

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

この

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

これはすべてのコンパレータ

の定義からです

ジェネリックパラメータTがメソッド名にどのように表示されているかに注目してください。

Eclipse/Netbeans/IntelliJのようなIDEがこの状況で助けになります。

+0

多くの感謝、それは働いた! –

3

に、このnoobの質問を気の毒に新しい、私はクライアントのリストを推定タイプである

List<Client> 

その場合、あなたのコンパレータは、タイプComparator<Client>である必要があり、そしてあなたが変更する必要がimplement Comparator<Client>後(この場合には、名前で)

関連する問題