-1

意味が分からずとても困ってい<E>ます。E の代わりに何を入れるかについて混乱しています。Integer や Double などの型をそこに入れることができると言われました。しかし、ArrayList または LinkedList をそこに配置できるとも言われました。誰かが明確にすることができれば、それは大歓迎です。

4

5 に答える 5

3

E型変数です。これは変数であり、特定の型のプレース ホルダーです。

この種の構文は、特定のクラスが指定されていない型でパラメーター化されていることを伝えたい場合に、パラメトリック ポリモーフィズムで使用されます。

Eこれは、追加できるいくつかの制約によって与えられる仕様の程度を持つ特定の型であるという事実に依存するコードを記述できることを意味します<E extends MySuperType>Eまた、クラス定義全体でジェネリック型を参照するために使用できます。

あなたは正しいと言われました: 変数は単なるプレースホルダーにすぎないので、 のような具体的な型を含むことができますが、Double最後ArrayList<Double>ArrayList<?>、未指定の型のコレクションである も含むことができます。は、Java ジェネリック?のもう 1 つの特別なキーワードです。

于 2013-04-11T02:37:28.560 に答える
2

<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であり、クラスのインスタンスをインスタンス化するまでわかりません。

于 2013-04-11T02:36:20.503 に答える
0

< E > は、渡される「タイプ」のプレースホルダーです。これは、リストが保持するタイプです。たとえば、arrayList での実装です。新しい配列リストを作成する場合は、リストが保持するオブジェクト タイプを渡す必要があります。

ArrayList の例 = 新しい ArrayList ();

arrayList クラスを見ると、次のようになります。

public class ArrayList < E > {...}

基本的には、いくつかの「タイプ」のリストを保持すると言っていますが、そのタイプはコンパイル時に渡される必要があり、それまではわかりません

于 2013-04-11T02:36:25.477 に答える