J'ai l'impression que les personnes ci-dessus ont un problème de compréhension. Tout d'abord, List<?> représente un caractère générique illimité. Il ne représente aucun type, mais représente un type spécifique. ce qu'est ce type spécifique lors de la programmation. Care List représente une liste native, une liste sans paramètres génériques. Il n'y a rien à dire à ce sujet et son utilisation n'est pas recommandée signifie que cette liste stocke Object, tant que c'est un objet, il peut être mis dedans ; Enfin, List< extends Object> représente une collection. Cette collection stocke l'une des sous-classes spécifiques d'Object, pas n'importe quelle sous-classe d'objet.
La dernière chose que je veux dire est que <?> est en fait un peu similaire à <? extends Object>. Cette similitude se reflète dans le fait qu'ils peuvent se correspondre sans générer d'avertissements. 🎜>
public class Base
{
public static void unbounded(List<?> list){}
public static void upBounded(List<? extends Object> list){}
public static void main(String args[])
{
List<?> list1 = new ArrayList<Object>() ;
List<? extends Object> list2 = new ArrayList<Object>() ;
unbounded(list2) ;
upBounded(list1) ;
}
}
Cependant, ces différences ne sont générées par le compilateur qu'au moment de la compilation, en raison de l'effacement, elles sont toutes List<Object>
List<?> et List : Cela signifie que n'importe quel type d'objet peut être placé dans la collection. Si List est utilisé seul, il y aura un avertissement dans Eclipse ;
: Il s'agit de stocker des objets de type Object dans une collection. Comprendre le mécanisme d'héritage et de transformation ascendante en Java. Il n'est pas difficile de constater que cette collection peut réellement stocker n'importe quel type d'objet ;
List<Object>
> : Cela signifie que les objets enregistrés dans la collection doivent être des objets de sous-classe de la classe Object
;
List<? extends ObjectPour plus de détails, veuillez vous référer à la partie sur les génériques dans "Java Core Technology (Volume 1)"...
La liste est un type de collection. < > représente un type générique List<?> représente n'importe quel type List<Object> représente que des objets de type object peuvent être placés dans cette collection List<? représente Tout objet de type qui hérite de la classe d'objet peut être placé dans cette collection
Si vous souhaitez en savoir plus sur les petits gestes du cadre de collection, vous pouvez lire une chronique que j'ai écrite, qui comporte un chapitre sur le cadre de collection
**List<?>, List, List<Object>, List<? extends Object> Les différences sont les suivantes : 1. Comprendre que les génériques sont destinés à la vérification de type. placez-les dans Pour les éléments de la collection, en limitant les types dans <> lors de la compilation, les erreurs peuvent être vérifiées autant que possible lors de la compilation, au lieu de générer des exceptions lors de l'exécution en ligne. 2. Si List est écrit comme ceci, il y aura une ligne jaune en dessous dans Eclipse et il y aura un avertissement. Et il est également écrit de manière irrégulière, tandis que le reste est écrit de manière standardisée. 3.List<?> peut mettre n'importe quel type ; List<Object> ne peut mettre que le type Object, mais comme Object est la classe parent de toutes les classes, d'autres classes peuvent être forcées d'effectuer une conversion de type en ajoutant (Object) dans front , List<? extends Object> est également le même, vous pouvez mettre n'importe quelle classe ou la classe Object elle-même. J'espère que cela vous aidera~~**
J'ai l'impression que les personnes ci-dessus ont un problème de compréhension. Tout d'abord, List<?> représente un caractère générique illimité. Il ne représente aucun type, mais représente un type spécifique. ce qu'est ce type spécifique lors de la programmation. Care List représente une liste native, une liste sans paramètres génériques. Il n'y a rien à dire à ce sujet et son utilisation n'est pas recommandée signifie que cette liste stocke Object, tant que c'est un objet, il peut être mis dedans ; Enfin, List< extends Object> représente une collection. Cette collection stocke l'une des sous-classes spécifiques d'Object, pas n'importe quelle sous-classe d'objet.
La dernière chose que je veux dire est que <?> est en fait un peu similaire à <? extends Object>. Cette similitude se reflète dans le fait qu'ils peuvent se correspondre sans générer d'avertissements. 🎜>
Cependant, ces différences ne sont générées par le compilateur qu'au moment de la compilation, en raison de l'effacement, elles sont toutes List<Object>Ma compréhension personnelle
List<?>
etList
: Cela signifie que n'importe quel type d'objet peut être placé dans la collection. SiList
est utilisé seul, il y aura un avertissement dans Eclipse ;: Il s'agit de stocker des objets de type Object dans une collection. Comprendre le mécanisme d'héritage et de transformation ascendante en Java. Il n'est pas difficile de constater que cette collection peut réellement stocker n'importe quel type d'objet ;
> : Cela signifie que les objets enregistrés dans la collection doivent être des objets de sous-classe de la classe ObjectList<Object>
;
List<? extends Object
Pour plus de détails, veuillez vous référer à la partie sur les génériques dans "Java Core Technology (Volume 1)"...La liste est un type de collection.
< > représente un type générique
List<?> représente n'importe quel type
List<Object> représente que des objets de type object peuvent être placés dans cette collection
List<? représente Tout objet de type qui hérite de la classe d'objet peut être placé dans cette collection
Si vous souhaitez en savoir plus sur les petits gestes du cadre de collection, vous pouvez lire une chronique que j'ai écrite, qui comporte un chapitre sur le cadre de collection
**List<?>, List, List<Object>, List<? extends Object> Les différences sont les suivantes :
1. Comprendre que les génériques sont destinés à la vérification de type. placez-les dans Pour les éléments de la collection, en limitant les types dans <> lors de la compilation, les erreurs peuvent être vérifiées autant que possible lors de la compilation, au lieu de générer des exceptions lors de l'exécution en ligne.
2. Si List est écrit comme ceci, il y aura une ligne jaune en dessous dans Eclipse et il y aura un avertissement. Et il est également écrit de manière irrégulière, tandis que le reste est écrit de manière standardisée.
3.List<?> peut mettre n'importe quel type ; List<Object> ne peut mettre que le type Object, mais comme Object est la classe parent de toutes les classes, d'autres classes peuvent être forcées d'effectuer une conversion de type en ajoutant (Object) dans front , List<? extends Object> est également le même, vous pouvez mettre n'importe quelle classe ou la classe Object elle-même.
J'espère que cela vous aidera~~**