In Java, ho bisogno di restituire un Iterator dal mio metodo. I miei dati provengono da un altro oggetto che di solito può darmi un iteratore, quindi posso solo restituirlo, ma in alcune circostanze i dati sottostanti sono nulli. Per coerenza, voglio restituire un iteratore "vuoto" in quel caso in modo che i miei chiamanti non debbano verificare nulla.iteratore Java su una raccolta vuota di un tipo parametrizzato
volevo scrivere qualcosa di simile:
public Iterator<Foo> iterator() {
if (underlyingData != null) {
return underlyingData.iterator(); // works
} else {
return Collections.emptyList().iterator(); // compiler error
}
}
Ma il compilatore Java si lamenta del ritorno Iterator<Object>
invece di Iterator<Foo>
. Il casting su (Iterator<Foo>)
non funziona neanche.
Ho appena scoperto che a volte il tentativo di essere veloce rallenta. Avevo scritto un'implementazione di Iterator vuota e sono tornato qui per scoprire che ero stato su una pista di coniglietto. +1 –
Nell'API Java 1.7 Collections è stato esteso con 'Collections.emptyIterator()'. –