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