Quelle est la différence entre Et dans Java Generics?

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 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 coll ) 

Bien que Soit supposé être un raccourci pour , il y a une petite différence entre les deux. est reifiable pendant que n’est pas La raison pour laquelle ils l’ont fait est de faciliter la distinction entre les types reifiables. Quelque chose qui ressemble à , , 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; 

pour plus d’infos, lisez les génériques et collections Java de Maurice Naftalin

est un raccourci pour . 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 .

  

signifie que vous pouvez passer un object ou une sous-classe qui étend la classe Object .

 ArrayList numberList = new ArrayList(); //Number of subclass numberList = new ArrayList(); //Integer extends Number numberList = new ArrayList(); // Float extends Number 

entrer la description de l'image ici

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:

entrer la description de l'image ici