とても簡単です。これは、J2SE 5で導入された新機能です。クラス名の後に山括弧を指定すると、任意のタイプのデータを保持できる一時的なデータタイプが作成されます。
例:
class A<T>{
T obj;
void add(T obj){
this.obj=obj;
}
T get(){
return obj;
}
}
public class generics {
static<E> void print(E[] elements){
for(E element:elements){
System.out.println(element);
}
}
public static void main(String[] args) {
A<String> obj=new A<String>();
A<Integer> obj1=new A<Integer>();
obj.add("hello");
obj1.add(6);
System.out.println(obj.get());
System.out.println(obj1.get());
Integer[] arr={1,3,5,7};
print(arr);
}
}
の代わりに<T>
、実際には何でも書くことができ、同じように動作します。の<ABC>
代わりに書いてみてください<T>
。
これは便宜上のものです。
<T>
任意のタイプと呼ばれます
<E>
要素タイプとして
<N>
数値型として
<V>
価値として
<K>
キーとして
しかし、あなたはそれをあなたが好きな名前にすることができます、それは本当に重要ではありません。
また、Integer
、String
、Boolean
などどの助けコンパイル時の型のチェックでのJavaのラッパークラスです。たとえば、上記のコードでobj
は、はタイプString
であるため、他のタイプを追加することはできません(試行obj.add(1)
すると、エラーが発生します)。同様に、obj1
のInteger
タイプは、他のタイプを追加することはできません(試行するとobj1.add("hello")
、エラーが発生します)。
T createObject
プールやPoolFactory内のはず?どこにあるthis.freeObjects = ...
はずですか?それは別の例ですか?そこにそれを置くことは違法です。メソッド内にある必要があります。