È davvero semplice È una nuova funzionalità introdotta in J2SE 5 . Specificare parentesi angolari dopo il nome della classe significa che si sta creando un tipo di dati temporaneo che può contenere qualsiasi tipo di dati.
Esempio:
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);
}
}
Invece <T>
, puoi effettivamente scrivere qualsiasi cosa e funzionerà allo stesso modo. Prova a scrivere <ABC>
al posto di <T>
.
Questo è solo per comodità:
<T>
viene indicato come qualsiasi tipo
<E>
come tipo di elemento
<N>
come tipo di numero
<V>
come valore
<K>
come chiave
Ma puoi nominarlo come vuoi, non importa.
Inoltre, Integer
, String
, Boolean
ecc sono classi wrapper di Java, che aiuto nel controllo dei tipi durante la compilazione. Ad esempio, nel codice sopra, obj
è di tipo String
, quindi non è possibile aggiungere nessun altro tipo ad esso (provare obj.add(1)
, genererà un errore). Allo stesso modo, obj1
è del Integer
tipo, non puoi aggiungere nessun altro tipo (prova obj1.add("hello")
, l'errore sarà lì).
T createObject
dovrebbe essere all'interno Pool o PoolFactory? Dovethis.freeObjects = ...
dovrebbe essere? È un esempio separato? È illegale averlo lì; deve essere all'interno di un metodo.