我有一个抽象类Usuario
和一个ArrayList<Usuario>
与其三个子类的对象。我现在要遍历ArrayList
并返回一个值,具体取决于使用instanceof
针对该对象的结果。Java使用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
@Andreas如果内存发挥作用,这里的“快速枚举”只是“增强for循环”的同义词。任何性能改进都不会有任何要求。事实上,这个成语实际上在幕后使用了一个迭代器... TL; DR写得更快,性能相同。 – Mena