Gerçekten çok basit. J2SE 5'te tanıtılan yeni bir özellik . Sınıf adından sonra köşeli parantez belirtmek, her türlü veriyi tutabilecek geçici bir veri türü oluşturduğunuz anlamına gelir.
Misal:
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);
}
}
Bunun yerine, <T>aslında herhangi bir şey yazabilirsiniz ve aynı şekilde çalışır. <ABC>Yerine yazmayı deneyin <T>.
Bu sadece kolaylık sağlamak içindir:
<T> herhangi bir tür olarak ifade edilir
<E> eleman türü olarak
<N> sayı türü olarak
<V> değer olarak
<K> anahtar olarak
Ama istediğiniz herhangi bir şeyi adlandırabilirsiniz, gerçekten önemli değil.
Üstelik Integer, String, Booleanvb hangi yardım derleme sırasında türleri denetlenirken Java sarıcı sınıflardır. Örneğin, yukarıdaki kodda objtür vardır String, bu yüzden başka bir tür ekleyemezsiniz (deneyin obj.add(1), bir hata verecektir). Benzer şekilde, obj1taşımaktadır Integertürü, bunu (denemek için başka türde ekleyemezsiniz obj1.add("hello"), hata olacaktır).
T createObjectHavuz veya PoolFactory içeride olması gerekiyordu? Neredethis.freeObjects = ...olmalı? Bu ayrı bir örnek mi? Orada olması yasadışı; bir yöntemin içinde olmalıdır.