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
, Boolean
etc sont des classes wrapper de Java qui aident à la vérification des types lors de la compilation. Par exemple, dans le code ci-dessus, obj
est de type String
, vous ne pouvez donc pas y ajouter d'autre type (essayez obj.add(1)
, cela enverra une erreur). De même, obj1
est du Integer
type, vous ne pouvez pas y ajouter d'autre type (essayez obj1.add("hello")
, l'erreur sera là).
T createObject
censé ê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.