Pourquoi ne pas ArrayList.contient(Object.class) de travail pour trouver les types d'instances?
Dire que j'ai une liste de tableaux qui est rempli avec des objets de différents types...
ArrayList<Fruit> shelf = new ArrayList<Fruit>();
Apple apple = new Apple();
Orange orange = new Orange();
Pear pear = new Pear();
shelf.add(apple);
shelf.add(orange);
shelf.add(pear);
Je veux savoir si shelf
contient un Orange
objet. J'ai essayé
shelf.contains(Orange.class)
mais cela ne veut pas retourner la valeur true. Ma compréhension est que contains
fait usage de la equals
méthode pour objet de comparaison, donc je ne sais pas pourquoi c'est le cas.
Je me rends compte que je peux simplement parcourir la liste de tableaux et de vérifier le type des objets individuellement, mais je suis curieux de savoir pourquoi contains
ne se comportent pas de la manière que je l'attendez.
OriginalL'auteur voidHead | 2013-05-22
Vous devez vous connecter pour publier un commentaire.
Vous sont corrects,
contains
utiliseequals
. Cependant, une instance d'une classe n'est pas égal à un objet de la classe, c'est à direOrange.class.equals(new Orange())
est faux.Vous aurez besoin d'une méthode personnalisée pour vérifier une liste contenant une instance d'une classe.
Et voici un Java 8 version faisant appel à des Flux API et les lambdas:
contains
peut m'ont laissé éliminer la boucle. J'ai mal compris la différence entre une instance de classe et l'objet réel. Merci pour la clarification.OriginalL'auteur Vulcan
Essayez ceci:
OriginalL'auteur Mr D
De la Javadoc de ArrayList#contient
Vous devez fournir les
contains
méthode avec une instance de la classe, et non pas la classe de l'objet.OriginalL'auteur Craig