Niezmienne
Korzyść znajduje się w pierwszej przymiotnik czytać w that JavaDoc documentation: niezmienne.
Są chwile, kiedy pracujesz z kodem, który wymaga Set
(lub List
, itp.). W twoim własnym kontekście możesz mieć ścisłą potrzebę tylko jednego przedmiotu. Aby zrealizować własny cel, jakim jest wymuszenie reguły pojedynczego elementu tylko podczas prezentacji tego elementu w zestawie, należy użyć implementacji Set
, która zabrania dodawania więcej niż jednego elementu.
"Niezmienny" na Collections::singleton
oznacza, że po utworzeniu wynikowy obiekt Set
ma jedną i tylko jedną pozycję. Nie zero i nie więcej niż jeden. Nie można dodać więcej. Jeden przedmiot nie może zostać usunięty.
Na przykład wyobraź sobie, że Twój kod współpracuje z obiektem Employee
reprezentującym CEO (Chief Executive Officer) Twojej firmy. Twój kod jest jawnie dotyczy tylko CEO, więc wiesz, że może istnieć tylko jeden taki obiekt na raz, zawsze dokładnie jeden CEO. Mimo to chcesz wykorzystać istniejący kod, który tworzy raport dla określonego zbioru obiektów: Employee
. Korzystając z usługi Collection.singleton
masz gwarancję, że Twój własny kod nie będzie miał błędnie innego niż pojedynczy pracownik, a mimo to będzie mógł przekazać numer Set
.
Set<Employee> ceo = Collections.singleton(new Employee("Tim Cook")) ; // Always exactly one item in this context, only one CEO is possible.
ceo.add(…) ; // Fails, as the collection is immutable.
ceo.clear() ; // Fails, as the collection is immutable.
ceo.remove(…) ; // Fails, as the collection is immutable.
someReport.processEmployees(ceo) ;
Java 9: Set.of
& List.of
Java 9 i później oferuje nowe metody interfejsu Set.of
i List.of
do th sam efekt, co stanowi niezmienny zbiór pojedynczego elementu.
Set<Pet> pet = Set.of(someDog) ;
Ale rodzeństwo of
metody są przeciążone przyjąć dowolną liczbę elementów się w zbiorach niezmiennego, a nie tylko jeden element.
Set<Pet> pets = Set.of(someDog , someOtherDog , someCat) ;
Jedyną zaletą mogę myśleć byłoby to, że metody, które akceptują 'Set' nie zaakceptuje' Collections.singleton() 'gdyby wrócił prosty' Collection'. –
@Slanec rzeczywiście ...Podczas gdy metody przyjmujące "Kolekcję" chętnie przyjmą również "Zestaw" ... – fge
Być może dlatego, że słowo "singleton" w matematyce oznacza zbiór. – immibis