Vérifier si l'Objet est instance d'une Liste<Object>
J'ai un Object
qui contient parfois un List<Object>
. Je veux vérifier avec instanceof
, et si elle l'est, puis ajouter quelques éléments.
void add(Object toAdd) {
Object obj = getValue();
if (obj instanceof List<?>) {
List<?> list = obj;
if (list instanceof List<Object>) { //Error
((List<Object>) list).add(toAdd);
} else {
List<Object> newList = new ArrayList<Object>(list);
newList.add(toAdd);
setValue(newList);
}
return;
}
throw new SomeException();
}
Et on me dit que je ne peux pas vérifier si il est instanceof List<Object>
parce que java n'a pas de soins et effacé le type de <>
.
Est-ce à dire que je crée new ArrayList à chaque fois? Ou est-il un moyen de vérifier que, par exemple. avec la réflexion?
Ce que le diable est ce morceau de code censé faire?
Il est connu comme le Type d'effacement en Java stackoverflow.com/questions/339699/...
cela va être un wrapper autour de snakeyaml. Si j'ai une liste en yaml, il va l'analyser pour certains de la liste en Java. Si je veux ajouter un élément à cette liste, j'ai besoin de savoir quel type de liste il est. C'est pourquoi je fais une nouvelle liste de tableaux de type connu et ajoutez tous les éléments anciens, plus une nouvelle. Puis-je remplacer l'ancienne liste avec le nouveau, et quand je l'appelle snakeyaml pour la convertir à yaml, mon élément ajouté sera là.
Je veux ajouter un élément à cette liste, j'ai besoin de savoir quel type de liste il est." Non, vous ne le font pas. Comment snakeyaml "de savoir quel type de liste, il est"? Aussi longtemps que snakeyaml ne se soucie pas de ce que vous mettez là-dedans, il n'a pas d'importance.
Lol, je viens de remarqué que je peut lancer une liste à une Liste<Ce> ajouter et de ne pas jeter n'importe quoi.
Il est connu comme le Type d'effacement en Java stackoverflow.com/questions/339699/...
cela va être un wrapper autour de snakeyaml. Si j'ai une liste en yaml, il va l'analyser pour certains de la liste en Java. Si je veux ajouter un élément à cette liste, j'ai besoin de savoir quel type de liste il est. C'est pourquoi je fais une nouvelle liste de tableaux de type connu et ajoutez tous les éléments anciens, plus une nouvelle. Puis-je remplacer l'ancienne liste avec le nouveau, et quand je l'appelle snakeyaml pour la convertir à yaml, mon élément ajouté sera là.
Je veux ajouter un élément à cette liste, j'ai besoin de savoir quel type de liste il est." Non, vous ne le font pas. Comment snakeyaml "de savoir quel type de liste, il est"? Aussi longtemps que snakeyaml ne se soucie pas de ce que vous mettez là-dedans, il n'a pas d'importance.
Lol, je viens de remarqué que je peut lancer une liste à une Liste<Ce> ajouter et de ne pas jeter n'importe quoi.
OriginalL'auteur Wolf480pl | 2013-02-03
Vous devez vous connecter pour publier un commentaire.
Je me suis trompé dans ma réponse précédente car je ne comprend pas parfaitement à vos exigences.
si votre élément est un Objet, vous pouvez l'ajouter sans problème, tant que vous Avez une liste de quelque chose.
Vous n'avez pas à recréer la liste
Mise à JOUR
comme réponse à quelques commentaires, il n'y a pas de problème pour ajouter un objet à une liste, et il n'y a pas de problème afin de trouver ce type d'objet est au cours d'une itération après:
Aussi, est-ce que ça va être plus rapide que la copie d'un <50 éléments ArrayList?
Ce qui est totalement faux. C'est seulement si la classe de l'objet est une sous-classe de la liste de tableaux ou de quelque chose, et qui s'étend à l'aide d'un paramètre de type. Rien de ce qui est ce que l'OP est en train de faire.
vous êtes droit et la réponse ont été édités, la réponse a été écrit avant que la question a été édité et explique plus clairement, en ce qui concerne le sous-classe de ArrayList, vous êtes également en droit, mon erreur que j'ai eu le temps de pénurie. Bien que l'indicateur pour connaître le type de contenu de l'objet à travers la réflexion et ParameterizedType est précieux.
-1 édition est toujours mal. Un
List<?>
est pas nécessairement unList<Object>
.OriginalL'auteur Michael