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
, Boolean
vb hangi yardım derleme sırasında türleri denetlenirken Java sarıcı sınıflardır. Örneğin, yukarıdaki kodda obj
tür vardır String
, bu yüzden başka bir tür ekleyemezsiniz (deneyin obj.add(1)
, bir hata verecektir). Benzer şekilde, obj1
taşımaktadır Integer
türü, bunu (denemek için başka türde ekleyemezsiniz obj1.add("hello")
, hata olacaktır).
T createObject
Havuz 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.