意味が分からずとても困ってい<E>
ます。E の代わりに何を入れるかについて混乱しています。Integer や Double などの型をそこに入れることができると言われました。しかし、ArrayList または LinkedList をそこに配置できるとも言われました。誰かが明確にすることができれば、それは大歓迎です。
5 に答える
E
型変数です。これは変数であり、特定の型のプレース ホルダーです。
この種の構文は、特定のクラスが指定されていない型でパラメーター化されていることを伝えたい場合に、パラメトリック ポリモーフィズムで使用されます。
E
これは、追加できるいくつかの制約によって与えられる仕様の程度を持つ特定の型であるという事実に依存するコードを記述できることを意味します<E extends MySuperType>
。E
また、クラス定義全体でジェネリック型を参照するために使用できます。
あなたは正しいと言われました: 変数は単なるプレースホルダーにすぎないので、 のような具体的な型を含むことができますが、Double
最後ArrayList<Double>
にArrayList<?>
、未指定の型のコレクションである も含むことができます。は、Java ジェネリック?
のもう 1 つの特別なキーワードです。
<E>
Java Genericsで使用される型引数であり、後で役立つ型を指定します。たとえば、コンテナ クラスでは、最初に記述したときに何が入るかわかりませんが、実装ではその内容が考慮されます。
通常、次のように表示されます。
List somelist = new ArrayList<Integer>(); //or some other type
ArrayList
が保持されることを意味しIntegers
ます。もちろん、 の代わりにどの型を入れても実装は同じままですInteger
が、Java では、参照するすべてのオブジェクトの型を宣言する必要があります。(または、怠け者で単にObject
.
それ以外の場合は、
class Queue<T> {
private LinkedList<T> items = new LinkedList<T>();
public void enqueue(T item) {
items.addLast(item);
}
public T dequeue() {
return items.removeFirst();
}
public boolean isEmpty() {
return (items.size() == 0);
}
}
( Javanotesから取得)。クラス定義の変数T
は、渡された型をキャプチャし、渡された型T
の代わりに使用できます。たとえば、メソッドdequeue
はオブジェクトを返しますが、具体的には typeT
であり、クラスが記述された後にのみ認識されます。methodenqueue
では、いくつかのオブジェクトをキューに追加する必要がありますが、具体的には typeT
であり、クラスのインスタンスをインスタンス化するまでわかりません。
< E > は、渡される「タイプ」のプレースホルダーです。これは、リストが保持するタイプです。たとえば、arrayList での実装です。新しい配列リストを作成する場合は、リストが保持するオブジェクト タイプを渡す必要があります。
ArrayList の例 = 新しい ArrayList ();
arrayList クラスを見ると、次のようになります。
public class ArrayList < E > {...}
基本的には、いくつかの「タイプ」のリストを保持すると言っていますが、そのタイプはコンパイル時に渡される必要があり、それまではわかりません