У меня есть абстрактный класс Usuario
и ArrayList<Usuario>
с объектами его трех подклассов. Теперь я хочу выполнить итерацию через ArrayList
и вернуть значение в зависимости от результата использования instanceof
против этого объекта.Java use instanceof с итератором
Я получаю ошибку: java.util.NoSuchElementException
.
Я полагаю, это из-за того, что итератор является объектом Iterator
, а не из любого из подклассов от Usuario
. Я прав? есть ли какое-либо решение для этого?
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;
}
Хороший ответ, за исключением расширенной 'for' петли не«быстро». Он делает то же самое, т. Е. Использует итератор. Это простой и понятный код, но это не быстрый код. Быть проще, это может быть быстрее написать, но это не то, как читается ваш текст. – Andreas
@ Аndreas, если память служит, «быстрое перечисление» здесь просто синоним «усиление для цикла». Никаких претензий к каким-либо улучшениям производительности. Фактически, эта идиома на самом деле использует итератор за кулисами ... TL; DR быстрее записывать, такую же производительность. – Mena