È 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, Booleanecc 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 Integertipo, non puoi aggiungere nessun altro tipo (prova obj1.add("hello"), l'errore sarà lì).
T createObjectdovrebbe essere all'interno Pool o PoolFactory? Dovethis.freeObjects = ...dovrebbe essere? È un esempio separato? È illegale averlo lì; deve essere all'interno di un metodo.