Ich habe eine abstrakte Klasse und eine ArrayList<Usuario>
mit Objekten seiner drei Unterklassen. Ich möchte nun die ArrayList
durchlaufen und einen Wert zurückgeben, der vom Ergebnis der Verwendung von instanceof
für dieses Objekt abhängt.Java benutze instanceof mit iterator
Ich erhalte einen Fehler: java.util.NoSuchElementException
.
Ich nehme an, es liegt daran, dass der Iterator ein Objekt von Iterator
ist und nicht von irgendeiner der Unterklassen von Usuario
. Habe ich recht? Gibt es dafür eine Lösung?
public int comprobarDni(String dniAComprobar, ArrayList<Usuario> listaUsuarios) {
Iterator<Usuario> itUsuarios = listaUsuarios.iterator();
while (itUsuarios.hasNext()) {
if (dniAComprobar.equals(itUsuarios.next().getDni())) {
if (itUsuarios.next() instanceof UsuarioBiblioteca) {
return 1;
} else if (itUsuarios.next() instanceof Bibliotecario) {
return 2;
} else if (itUsuarios.next() instanceof BibliotecaExterna) {
return 3;
}
}
}
return 0;
}
Gute Antwort, außer der verbesserten 'for' Schleife ist nicht„schnell“. Es macht dasselbe, d. H. Verwendet einen Iterator. Es ist einfacher und sauberer Code, aber es ist kein schneller Code. Da es einfacher ist, ist es vielleicht schneller zu schreiben, aber das liest sich nicht so. – Andreas
@Andreas, wenn Speicher dient, "schnelle Enumeration" ist hier nur ein Synonym für "Enhanced for Loop". Kein Anspruch auf irgendeine Leistungsverbesserung. Tatsächlich verwendet dieses Idiom tatsächlich einen Iterator hinter den Kulissen ... TL; DR schneller zu schreiben, gleiche Leistung. – Mena