Passare immutablet al posto del set?
-
23-09-2019 - |
Domanda
Ho un metodo che si aspetta un parametro set. Voglio passare in un set vuoto e non voglio alcun effetto collaterale sul set.
Posso farlo con le collezioni passando:
Collections.unmodifiableSet(Sets.newHashSet())
Ma voglio passare:
ImmutableSet.of()
Se faccio il primo a Set<Object>
è creato e ottengo "Metodo non applicabile per l'errore di Args Set '. Se lo faccio ImmutableSet<Object>
viene creato e ricevo un errore simile.
Questo funziona:
Collections.unmodifiableSet(new HashSet<String>())
... ma sembra brutto e voglio trovare un modo di Google Collections.
Soluzione
Prova questo:
ImmutableSet.<String>of()
Funzionerà anche questo:
Collections.<String>emptySet()
Questa sintassi è utile per specificare manualmente gli argomenti di tipo ogni volta che l'inferenza del tipo fallisce. :-)
Altri suggerimenti
Questo funzionerà anche:
public static void main(String[] args) {
Set<String> emptySet = ImmutableSet.of();
doStuffWith(emptySet);
}
static void doStuffWith(Set<String> strings) {
// ...
}
Perché il tipo di inferenza nota che stai assegnando a Set<String>
variabile e sa che il parametro di tipo deve essere String
.