J’ai vu le joker utilisé auparavant pour désigner n’importe quel object – mais j’ai récemment vu une utilisation de:
Puisque tous les objects étendent Object, ces deux usages sont-ils synonymes?
>
et extends Object>
extends Object>
sont synonymes, comme prévu.
Il y a quelques cas avec des génériques où extends Object
n’est pas réellement redondant. Par exemple,
fera que T
deviendra Object
sous Effacement, tandis qu’avec
il deviendra Foo
sous effacement. (Cela peut être important si vous essayez de conserver la compatibilité avec une API pré-générique utilisant Object
.)
Source: http://download.oracle.com/javase/tutorial/extra/generics/convert.html ; il explique pourquoi la classe java.util.Collections
du JDK a une méthode avec cette signature:
public static > T max( Collection extends T> coll )
Bien que >
Soit supposé être un raccourci pour extend object>
extend object>
, il y a une petite différence entre les deux. >
est reifiable pendant que extend object>
extend object>
n’est pas La raison pour laquelle ils l’ont fait est de faciliter la distinction entre les types reifiables. Quelque chose qui ressemble à extends something>
extends something>
,
,
sont non vérifiables.
Par exemple, ce code fonctionnerait
List aList = new ArrayList<>(); boolean instanceTest = aList instanceof List>;
mais cela donne une erreur
List aList = new ArrayList<>(); boolean instancetest = aList instanceof List extends Object>;
pour plus d’infos, lisez les génériques et collections Java de Maurice Naftalin
>
est un raccourci pour extends Object>
extends Object>
. Vous pouvez lire ci-dessous le lien partagé pour plus de détails.
>
"?"
dénote tout type inconnu, il peut représenter n’importe quel type dans le code pour. Utilisez ce caractère générique si vous n’êtes pas sûr du type.
ArrayList> unknownList = new ArrayList(); //can accept of type Number unknownList = new ArrayList(); //Float is of type Number
Note: >
Signifie n’importe quoi. Donc, il peut accepter de Type qui ne sont pas hérités de la classe Object
.
extends Object>
extends Object>
extends Object>
signifie que vous pouvez passer un object ou une sous-classe qui étend la classe Object
.
ArrayList extends Number> numberList = new ArrayList(); //Number of subclass numberList = new ArrayList(); //Integer extends Number numberList = new ArrayList(); // Float extends Number
T – utilisé pour désigner le type
E – utilisé pour désigner un élément
K – clés
V – valeurs
N – pour les nombres
Ref: