これは本当に簡単です。これは、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>
、あなたが実際に何かを書くことができますし、それは同じように動作します。 <T>
の代わりに<ABC>
と書きます。
これは単に便宜のためである:
<T>
は、要素タイプ番号型として
<N>
などの任意のタイプ
<E>
と呼ばれる値として
<V>
キーとして
<K>
でも、名前を付けても問題ありません。
また、Integer
,String
,Boolean
などは、コンパイル時の型チェックに役立つJavaのラッパークラスです。たとえば、上記のコードでobj
のタイプはString
なので、他のタイプを追加することはできません(obj.add(1)
を試してみてください)。同様に、obj1
はInteger
タイプですが、他のタイプを追加することはできません(obj1.add("hello")
を試してみてください)。
google java generics –
あなたのコードを解析するのは難しいです。開始のためのインデントはなく、2つの中括弧と1つの閉じるだけがあります。 'T createObject'はPoolまたはPoolFactoryの中にあるはずですか? 'this.freeObjects = ...'はどこにあるのでしょうか?これは別の例ですか?そこに置くことは違法です。それはメソッドの中になければなりません。 – mgiuca
リスト list = new ArrayList <>();のように使用できる '<>'(ダイヤモンド演算子)に関する情報を探している人はhttps://docs.oracle.com/javase/7/docsをご覧ください/technotes/guides/language/type-inference-generic-instance-creation.html。 –
Pshemo