Це дійсно просто. Це нова функція, представлена в 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
повинен бути всередині Pool або PoolFactory? Деthis.freeObjects = ...
має бути? Це окремий приклад? Нелегально мати його там; це повинно бути всередині методу.