Es realmente 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 temporales 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>
, en realidad se puede escribir cualquier cosa y que funcionará de la misma manera. Intente escribir <ABC>
en lugar de <T>
.
Esto es sólo 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 ponerle el nombre que quieras, en realidad no importa.
Además, Integer
, String
, Boolean
etc. son clases de envoltorio de Java que ayudan a verificar los tipos durante la compilación. Por ejemplo, en el código anterior, obj
es del tipo String
, por lo que no puede agregar ningún otro tipo (intente obj.add(1)
, emitirá un error). Del mismo modo, obj1
es del tipo Integer
, no puede agregar ningún otro tipo (intente obj1.add("hello")
, el error estará allí).
google java generics –
Me resulta difícil analizar su código. No hay sangría para empezar, y hay dos llaves abiertas y solo una cerrada. ¿Se supone que 'T createObject' está dentro de Pool o PoolFactory? ¿Dónde se supone que 'this.freeObjects = ...' es?Es ese un ejemplo separado? Es ilegal tenerlo allí; tiene que estar dentro de un método. – mgiuca
Si alguien está buscando información sobre '<>' (operador de diamante) que podría usarse como 'List list = new ArrayList <>();' visite https://docs.oracle.com/javase/7/docs /technotes/guides/language/type-inference-generic-instance-creation.html. –
Pshemo