Można go używać w przypadkach API że wdrożenie wymaga kupna logikę iterator spowoduje pustym wyniku. Zamiast zwracania wartości pustej zwracamy pusty iterator. Jak również możesz go użyć, aby zaoszczędzić trochę pamięci i do celów testowych.
Przykład uniemożliwiające zerowy i zapisuje jako powrót część pamięci w tym samym czasie:
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);
}
}
podano klasy, to pole items
nie intialized aż element został dodany. Aby zapewnić oczekiwane zachowanie w metodzie items()
, zwracamy pusty iterator. Korzyść z tego są następujące:
- Mniejsze zużycie pamięci:
- Klasa przydzielić pamięci, gdy jest naprawdę potrzebne
- Mniejsza mutacja pamięć
- Dopóki coś dodać do obiektu , nigdy nie tworzymy nowej instancji iteratora.
- nigdy Wracamy zerowej
Sorry link wymieniony jako „możliwym duplikat” nie jest odpowiedź na moje pytanie czy może być nie mogłem zrozumieć odpowiedź. Czy ktoś może się zastanowić - w jakim scenariuszu są one potrzebne? – user3366706
Pytanie brzmi: "Chcę zwrócić" pusty "iterator w takim przypadku, aby moi rozmówcy nie musieli sprawdzać wartości zerowej" :) –
ok dzięki :) nieświadomie odpowiedziałem na to (http: // stackoverflow .pl/questions/821536/java-iterator-over-an-empty-collection-of-a-parametized-type) pytanie w imię nowego pytania! Tak więc to pytanie można oznaczyć jako duplikat odpowiedzi. nie jako duplikat pytania. Żartuję, bez obrazy. – user3366706