13

私は方法を持っています:

public List<Stuff> sortStuff(List<Stuff> toSort) {
    java.util.Collections.sort(toSort);

    return toSort;
}

これにより、警告が生成されます。

Type safety: Unchecked invocation sort(List<Stuff>) of the generic method sort(List<T>) of type Collections.

Eclipse によると、警告を修正する唯一の方法は@SuppressWarnings("unchecked")、メソッドに追加することsortStuffです。これは、Java 自体に組み込まれているものを処理するための厄介な方法のように思えます。

これが本当に私の唯一の選択肢ですか?なぜですか、そうでないのですか?前もって感謝します!

4

4 に答える 4

52

Collections.sort(List<T>)Tを実装する必要がありますComparable<? super T>Stuff実装しているように見えComparableますが、ジェネリック型引数を提供していません。

これを宣言してください:

public class Stuff implements Comparable<Stuff>

これの代わりに:

public class Stuff implements Comparable
于 2013-03-19T14:16:23.663 に答える
6

これを使用してください:

// Bad Code
public class Stuff implements Comparable{

    @Override
    public int compareTo(Object o) {
        // TODO
        return ...
    }

}

それともこれ?

// GoodCode
public class Stuff implements Comparable<Stuff>{

    @Override
    public int compareTo(Stuff o) {
        // TODO
        return ...
    }

}
于 2013-03-19T14:36:48.207 に答える
0

メソッドの戻り値の型を変更する必要があります

于 2013-03-19T14:28:23.803 に答える
0

ジェネリック コレクションの並べ替え

以下に示すように、このクラスには 2 つの並べ替え関数が定義されています。

public static <T extends Comparable<? super T>> void sort(List<T> list);

public static <T> void sort(List<T> list, Comparator<? super T> c);

これらはどちらも一見簡単ではなく、どちらも定義にワイルドカード (?) 演算子が含まれています。最初のバージョンは、T が Comparable を直接拡張するか、T またはスーパークラスをジェネリック パラメーターとして受け取る Comparable のジェネリック インスタンス化を拡張する場合にのみ、List を受け入れます。2 番目のバージョンは、T またはスーパータイプでインスタンス化された List と Comparator を取ります。

于 2013-03-19T14:31:57.763 に答える