Ho uno Object
che a volte contiene uno List<Object>
. Voglio verificarlo con instanceof
, e se lo è, quindi aggiungere alcuni elementi ad esso.Verifica se Object è l'istanza di Elenco <Object>
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();
}
E dice che non posso controllare se è instanceof List<Object>
perché Java non si cura e cancellato il tipo di <>
. Ciò significa che devo creare ogni volta un nuovo ArrayList? O c'è un modo per controllarlo, ad es. con la riflessione?
Che diavolo è questo pezzo di codice dovrebbe fare? – poitroae
È noto come cancellazione dei tipi in Java http://stackoverflow.com/questions/339699/java-generics-type-erasure-when-and-what-happens –
@ Michael questo sarà un wrapper attorno a snakeyaml. Se ho una lista in yaml, la analizzerò in qualche lista in Java. Se voglio aggiungere un elemento a questa lista, ho bisogno di sapere che tipo di lista è. Ecco perché creo una nuova ArrayList di tipo noto e aggiungo tutti i vecchi elementi, più una nuova. Quindi sostituisco la vecchia lista con quella nuova, e quando chiamo snakeyaml per riconvertirla in yaml, il mio elemento aggiunto sarà lì. – Wolf480pl