C'est vraiment simple. C'est une nouvelle fonctionnalité introduite dans J2SE 5 . La spécification de crochets angulaires après le nom de la classe signifie que vous créez un type de données temporaire qui peut contenir n'importe quel type de données.
Exemple:
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);
}
}
Au lieu de cela <T>, vous pouvez écrire n'importe quoi et cela fonctionnera de la même manière. Essayez d'écrire <ABC>à la place de <T>.
C'est juste pour plus de commodité:
<T> est appelé tout type
<E> comme type d'élément
<N> comme type de nombre
<V> comme valeur
<K> comme clé
Mais vous pouvez le nommer comme vous le souhaitez, cela n'a pas vraiment d'importance.
De plus, Integer, String, Booleanetc sont des classes wrapper de Java qui aident à la vérification des types lors de la compilation. Par exemple, dans le code ci-dessus, objest de type String, vous ne pouvez donc pas y ajouter d'autre type (essayez obj.add(1), cela enverra une erreur). De même, obj1est du Integertype, vous ne pouvez pas y ajouter d'autre type (essayez obj1.add("hello"), l'erreur sera là).
T createObjectcensé être à l'intérieur de Pool ou PoolFactory? Où estthis.freeObjects = ...censé être? Est-ce un exemple distinct? Il est illégal de l'avoir là-bas; il doit être à l'intérieur d'une méthode.