Es muy simple Es una nueva característica introducida en J2SE 5 . Especificar corchetes angulares después del nombre de la clase significa que está creando un tipo de datos temporal que puede contener cualquier tipo de datos.
Ejemplo:
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);
}
}
En lugar de <T>
, puedes escribir cualquier cosa y funcionará de la misma manera. Intenta escribir <ABC>
en lugar de <T>
.
Esto es solo por conveniencia:
<T>
se conoce como cualquier tipo
<E>
como tipo de elemento
<N>
como tipo de número
<V>
como valor
<K>
como clave
Pero puedes nombrarlo como quieras, realmente no importa.
Por otra parte, Integer
, String
, Boolean
etc, son clases de contenedor de Java, que ayuda en la comprobación de tipos durante la compilación. Por ejemplo, en el código anterior, obj
es de tipo String
, por lo que no puede agregarle ningún otro tipo (intente obj.add(1)
, generará un error). Del mismo modo, obj1
es del Integer
tipo, no puede agregarle ningún otro tipo (intente obj1.add("hello")
, el error estará allí).
T createObject
supone que está dentro de Pool o PoolFactory? ¿Dónde sethis.freeObjects = ...
supone que debe estar? ¿Es ese un ejemplo aparte? Es ilegal tenerlo allí; Tiene que estar dentro de un método.