我有一個抽象類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