2

それはかなり単純なものです。オブジェクトのリストを宣言したいのですが、すべてのオブジェクトが Comparable インターフェイスを実装していることを確認したいです。私は何をすべきか?書いてみます

   List<Comparable> heap = new ArrayList<Comparable>();

しかし、コンパイラは私に警告を出します。正しい書き方とは?

ありがとう

フォローアップ: 質問を投稿する前に質問を完了したと思っていましたが、そうではなかったようです。では、仕上げさせてください。

私の目的は、次のようなオブジェクトのリストを作成することです。1. Comparable インターフェイスを実装します。2. すべて同じ型です。

私はそれを作ることができます

   List<Comparable<?>> heap = new ArrayList<Comparable<?>>()

いいえ、できません。その理由は、リストから要素を取得して比較する必要があるためです。お気に入り:

   if( heap.get(0).compareTo(heap.get(1)) > 0)

ワイルドカード List> を使用すると、コンパイラでエラーが発生します。heap.get(0) は heap.get(1) と一致しないと言うので、それを宣言する正しい方法を知る必要があります。

私は誰かが私に警告が何であるかを尋ねているのを見つけました....それは私を驚かせます....まあ、警告は次のとおりです: Comparable は生の型です。ジェネリック型 Comparable への参照はパラメーター化する必要があります

4

3 に答える 3

4

raw type を使用しているためですComparableワイルドカード型パラメーターを指定Comparableしてみることができます:

List<Comparable<?>> heap = new ArrayList<Comparable<?>>();

オブジェクトをすべて同じタイプにしたい場合は、次の行に沿って何かを行うことができます

public static <T extends Comparable<? super T>> List<T> getList() {
    ...
}

からリストを返しますgetList()

于 2013-08-23T01:53:41.267 に答える
1

すべてのオブジェクトが同じタイプ (たとえば fe FooType) であるため、単に a を使用しList<FooType>ます。

于 2013-08-23T14:27:15.493 に答える
0

おそらく、Comparable を拡張する型のみを受け取り、その型の List を返すメソッドを作成できます。

public <T extends Comparable> List<T> getComparableList(T t) {
    List<T> heap = new ArrayList<T>();
    return heap;
}
于 2013-08-23T02:38:32.170 に答える