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, Booleanetc, 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, objes de tipo String, por lo que no puede agregarle ningún otro tipo (intente obj.add(1), generará un error). Del mismo modo, obj1es del Integertipo, no puede agregarle ningún otro tipo (intente obj1.add("hello"), el error estará allí).
T createObjectsupone 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.