Si può usare nei casi in cui API di implementare richiede un acquisto logica iteratore si tradurrà con risultato vuoto. Quindi, invece di restituire un valore null, si restituisce un iteratore vuoto. Come anche tu puoi usarlo per risparmiare memoria e per scopi di test.
Esempio che impediscono nullo in reso e salva certa memoria allo stesso tempo:
class LazyObjectInitialization {
private Collection<String> items;
public final Iterator<String> items() {
if(items == null || items.isEmpty()) {
return Collections.emptyIterator();
}
return items.iterator();
}
public final add(String item) {
if(items == null) {
items = new ArrayList<>();
}
items.add(item);
}
}
In classe sopra, quindi campo items
non viene inizializzata finché viene aggiunto un elemento. Quindi, per fornire un comportamento previsto nel metodo items()
, restituiamo un iteratore vuoto. Il vantaggio di questo sono i seguenti:
- Più piccolo consumo di memoria:
- La classe allocare la memoria quando è realmente necessario
- Più piccolo di memoria mutazione
- Fino a quando aggiungiamo qualcosa all'oggetto , non creiamo mai nuove istanze di iteratore.
- Non abbiamo mai restituire null
fonte
2014-10-09 22:33:41
Spiacente il link indicato come 'possibile duplicato di' non rispondere alla mia domanda o può essere non riuscivo a capire la risposta. Qualcuno può approfondire - a quale scenario sono necessari? – user3366706
La domanda risponde in realtà: 'Voglio restituire un iteratore" vuoto "in questo caso, quindi i miei chiamanti non devono eseguire il test per null' :) –
ok grazie :) inconsapevolmente ho risposto a questo (http: // stackoverflow .com/questions/821536/java-iterator-over-an-vuoto-raccolta-di-un-tipo-parametrico) domanda nel nome di una nuova domanda! Quindi questa domanda può essere etichettata come una risposta duplicata. non come una domanda duplicata. Sto scherzando, senza offesa. – user3366706