Immutabile
Il beneficio si trova nel primo aggettivo letto in that JavaDoc documentation: immutabili.
Ci sono momenti in cui si sta lavorando con codice che richiede uno Set
(o , ecc.). Nel tuo stesso contesto potresti avere un rigoroso bisogno di un solo oggetto. Per raggiungere il tuo obiettivo di applicare la regola del singolo elemento solo mentre devi presentare quell'elemento in un set, usa un'implementazione Set
che ti impedisce di aggiungere più di un elemento.
"Immutabile" su Collections::singleton
significa che, una volta creato, l'oggetto Set
risultante è garantito per avere uno e un solo oggetto. Non zero e non più di uno. Non è possibile aggiungere altro. L'unico oggetto non può essere rimosso.
Ad esempio, immagina che il tuo codice funzioni con un oggetto Employee
che rappresenta il CEO (Chief Executive Officer) della tua azienda. Il tuo codice si riferisce esplicitamente solo al CEO, quindi sai che può esserci solo uno di questi oggetti Employee
alla volta, sempre esattamente un amministratore delegato. Tuttavia, si desidera sfruttare un codice esistente che crea un report per una raccolta specificata di oggetti Employee
. Usando Collection.singleton
si garantisce che il proprio codice non abbia erroneamente un altro dipendente, pur essendo ancora in grado di passare un 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 e versioni successive offre nuovi metodi di interfaccia Set.of
e List.of
Th stesso effetto, una collezione immutabile di un singolo elemento.
Set<Pet> pet = Set.of(someDog) ;
Ma fratello of
metodi sono sovraccarichi di accettare qualsiasi numero di elementi per essere nella collezione immutabile, non solo un elemento.
Set<Pet> pets = Set.of(someDog , someOtherDog , someCat) ;
L'unico vantaggio che posso pensare è che i metodi che accettano un 'set' non avrebbe accettato un' Collections.singleton() 'aveva restituito un semplice' Collection'. –
@Slanec infatti ...Mentre i metodi che accettano un 'Collection' accetteranno felicemente anche un' Set' ... – fge
Forse perché la parola "singleton" in matematica implica un set. – immibis