Class
Voici mon interprétation, c’est le modèle de classe mais la classe? signifie que le nom de la classe est indéterminé et étend la classe Something.
S’il y a quelque chose qui ne va pas dans mon interprétation, faites le moi savoir.
Vous avez presque raison. Fondamentalement, Java n’a pas de concept de modèle (C ++ a). Cela s’appelle les génériques. Et cela définit une classe générique Class<>
avec l’atsortingbut des génériques étant n’importe quelle sous-classe de Something
.
Je suggère de lire ” Quelles sont les différences entre les types” génériques “en C ++ et Java? ” Si vous voulez faire la différence entre les modèles et les génériques.
Il y a quelques réponses déroutantes ici donc je vais essayer de clarifier cela. Vous définissez un générique en tant que tel:
public class Foo { private T t; public void setValue(T t) { this.t = t; } public T getValue() { return t; } }
Si vous voulez qu’un générique sur Foo étende toujours une classe Bar, vous le déclareriez comme tel:
public class Foo { private T t; public void setValue(T t) { this.t = t; } public T getValue() { return t; } }
Le ?
est utilisé lorsque vous déclarez une variable.
Foo extends Bar>foo = getFoo();
OU
DoSomething(List extends Bar> listOfBarObjects) { //internals }
Tu as raison
La définition est que la classe doit être un sous-type de quelque chose
C’est la même chose que la Class
, mais il y a une condition que T
doit extends Something
ou implements Something
comme suggéré par Anthony Accioly
Il peut aussi être classe Something
soi
Tu as raison.
En Java génériques, le ?
opérateur signifie “toute classe”. Le mot extends
clé extend peut être utilisé pour qualifier cela “toute classe qui étend / implémente Something
(ou est Something
).
Ainsi, vous avez “la Class
d’une classe, mais cette classe doit être ou étendre / implémenter Something
“.
Tu as raison.
Cependant, vous voudrez généralement nommer la classe qui étend quelque chose et écrire par exemple
. Si vous utilisez ?
vous ne pouvez plus rien faire avec le type donné plus tard.