2010-08-30 12 views

risposta

29
+2

Guava sta diventando una biblioteca fantastica. Questo rocce! +1 –

+2

Lo avrebbe accettato se 'Sets.immutableEnumSet' avrebbe restituito una classe pubblica 'ImmutableEnumSet', non solo' ImmutableSet'. Anche se proverò a fare una richiesta per farlo. –

+4

Quale beneficio vedi avere questo tipo di oggetto ImmutableEnumSet pubblico, mi chiedo? –

11

Cosa c'è che non va con Collections.unmodifiableSet() che avvolge un EnumSet?

Vero, l'originale EnumSet è ancora modificabile, ma finché si elimina il riferimento originale, è altrettanto immutabile all'interno del wrapper.

edit: OK, poiché EnumSet non offre alcuna metodi di istanza al di sopra l'interfaccia Set, l'unico motivo per non usare questa soluzione è che il tipo EnumSet è utile a scopo di documentazione, e si perde che quando avvolgendolo in un Set. Oltre a questo, il comportamento EnumSet verrà mantenuto.

+4

Non ha tutti i metodi di un EnumSet' –

+0

@Colin 'quali metodi vorrei che essere? Potresti ancora usare i metodi statici per creare l'enumset prima di avvolgerlo, e non vedo alcun nuovo metodo di istanza in enumset che altri set non abbiano neanche. –

+0

@skaffman. Penso di volerlo principalmente a scopo di documentazione. La cosa su EnumSet è che specifica un certo ordine di iterazione, e se usi 'Set' al posto di' EnumSet' potrebbe produrre risultati diversi da quanto ti aspetti: qualcuno vede il 'Set' nella firma del metodo e passa in' HashSet' per esempio. Senza questo requisito il tuo suggerimento andrebbe bene. A proposito, il 'EnumSet' non ha metodi aggiuntivi (solo costruttori), anche se sarebbe davvero bello avere' first', 'last' e' reverseIterator' in alcuni casi. –