Comment vérifier si un Objet est un Type de Collection en Java?
À l'aide de java réflexion, nous pouvons facilement savoir si un objet est un tableau. Quelle est la meilleure façon de savoir si un objet est un ensemble(Set,List,Map,Vecteur...)?
Vous devez vous connecter pour publier un commentaire.
?
là. Vous ne pouvez pas obtenir à la effacées type de composant. Si vous avez besoin de savoir quel type d'objets peut être dans la collection, vous avez besoin de regarder les éléments eux-mêmes.Mise à jour: il y a deux scénarios possibles ici:
Vous de déterminer si un objet est une collection;
Vous devez déterminer si une classe est une collection.
Les solutions sont légèrement différents, mais les principes sont les mêmes. Vous devez également définir ce qui constitue exactement une "collection". La mise en œuvre soit
Collection
ouMap
couvrira la Java des Collections.Solution 1:
Solution 2:
(1) peut également être mis en œuvre en termes de (2):
Je ne pense pas que l'efficacité de la méthode sera très différent de l'autre.
Puisque vous avez mentionné la réflexion dans votre question;
Java bénéficie de la
instanceof
opérateur (JLS 15.20.2) pour tester si un objet est d'un type donné.Une chose doit être mentionné ici: il est important dans ce genre de constructions à vérifier dans le bon ordre. Vous verrez que si vous aviez échangé l'ordre de le vérifier dans l'extrait ci-dessus, le code compile, mais elle ne fonctionnera plus. C'est le code suivant ne fonctionne pas:
Le problème est qu'une
List<?>
est-unCollection<?>
, donc il va passer le premier test, et laelse
signifie qu'il n'atteindra jamais le deuxième test. , Vous devez les tester, du plus spécifique au plus général type de.List
. Point Important tient toujours.Tester si l'objet implémente soit
java.util.Collection
oujava.util.Map
. (Map
doit être testé séparément, car elle n'est pas une sous-interface deCollection
.)Avez-vous pensé plus tard a séparer sur l'utilisation de
instanceof
?Comme, disons
Mais pas que pure OOP style, il est cependant largement utilisé pour la soi-disant "type de l'escalade".
Collection
etCollection<?>
sont équivalentes, car les deux contiennentObject
instances. En conséquence, il n'existe pas de valeur ajoutée ici pour les génériques.