0

私はJavaを学んでおり、ジェネリックスとraw型のトピックに取り掛かっています。私はJavaでジェネリック(以前は知らなかった)のライブラリクラスをいくつか使用していて、それらを単なる通常のクラスであるかのように使用していた(通常のオブジェクトのように宣言している)ことがわかりました。それは生のタイプにつながりますか?また、raw型は回避されると言われているので、Javaのライブラリクラスまたはインターフェイスを使用する前に、それらが汎用であるかどうかを確認する必要がありますか?そして、クラスがジェネリックである場合、それを意図したとおりに使用しますか(パラメーター化されたタイプ)?

4

2 に答える 2

1

クラスが次のように宣言されている場合:

public class MyClass<T>

そして、あなたはそれを次のように使用します:

MyClass myVariable = new MyClass();

そうです、それは確かに生のタイプであり、あなたはそれを使うべきではありません。コレクションクラス(のようなArrayList)はJava 5以降では汎用であり、利用可能な場合は常に汎用バリアントを使用する必要があります。コンパイラの警告に注意してください。とりわけ、ジェネリックの使用について通知します。

于 2012-07-13T05:22:06.813 に答える
0

このサンプルクラスを見てください。

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

これはタイプTのジェネリッククラスです。内部で使用する必要のあるタイプに関連付けるために必要な任意のタイプのクラスのインスタンスを作成できます。

たとえば、整数型を使用する場合は、次のようにクラスをインスタンス化できます。

Queue<Integer> queue = new Queue<Integer>();

次のように、クラスで複数のタイプを使用することもできます。

class Pair<T,S> {
   public T first;
   public S second;
   public Pair( T a, S b ) {
      first = a;
      second = b;
   }
}

そして、次のようにインスタンス化します。

Pair<String,Color> colorName = new Pair<String,Color>("Red", Color.RED);

またはこのように:

Pair<Double,Double> coordinates = new Pair<Double,Double>(17.3,42.8);
于 2012-07-13T05:36:29.640 に答える