<T>
est un Générique et peut généralement être lu comme "de type T". Ce que cela signifie réellement dépend du type à gauche du <>.
Je ne sais pas ce qu'un Pool
o PoolFactory
est, mais vous mentionnez également ArrayList<T>
qui est une classe Java standard, je vais donc en parler.
En général, vous ne verrez pas "T", mais un autre type. Donc si vous voyez ArrayList<Integer>
par exemple, qui signifie "Un ArrayList
de Integer
s." De nombreuses classes utilisent des génériques pour contraindre le type des éléments d'un conteneur, par exemple. Un autre exemple est HashMap<String, Integer>
ce qui signifie "une carte avec String
et Integer
valeurs."
L'exemple de votre Pool est un peu différent, car il s'agit de définir une classe. Dans ce cas, vous créez une classe que quelqu'un d'autre pourrait instancier avec un type particulier à la place de T. Par exemple, je pourrais créer un objet de type Pool<String>
en utilisant la définition de votre classe. Cela voudrait dire deux choses :
- Mon
Pool<String>
aurait une interface PoolFactory<String>
avec un createObject
qui renvoie String
s.
- En interne, le
Pool<String>
contiendrait un ArrayList
de cordes.
C'est une bonne nouvelle, parce qu'à un autre moment, je pourrais arriver et créer un Pool<Integer>
qui utiliserait le même code, mais aurait Integer
partout où vous voyez T
dans la source.
4 votes
Je trouve difficile d'analyser votre code. Il n'y a pas d'indentation pour commencer, et il y a deux accolades ouvertes et une seule fermée. Est-ce que
T createObject
est censé se trouver à l'intérieur de Pool ou de PoolFactory ? Où se trouvethis.freeObjects = ...
est censé être ? S'agit-il d'un exemple distinct ? Il est illégal de l'avoir à cet endroit ; il doit être à l'intérieur d'une méthode.1 votes
Si quelqu'un cherche des informations sur
<>
(opérateur diamant) qui pourrait être utilisé commeList<Integer> list = new ArrayList<>();
visitez docs.oracle.com/javase/7/docs/technotes/guides/language/ .