ImmutableSet anstelle von Set bestehen?
-
23-09-2019 - |
Frage
Ich habe eine Methode, die einen festgelegten Parameter erwartet. Ich möchte ein leeres Set eingeben, und ich möchte keine Nebenwirkungen am Set.
Ich kann dies mit Sammlungen tun, indem ich einging:
Collections.unmodifiableSet(Sets.newHashSet())
Aber ich möchte eingeben:
ImmutableSet.of()
Wenn ich das erstere mache a Set<Object>
wird erstellt und ich erhalte "Methode, die nicht für Args Set" -Fehler anwendbar sind. Wenn ich letztere mache, bekomme ich ImmutableSet<Object>
wird erstellt und ich erhalte einen ähnlichen Fehler.
Das funktioniert:
Collections.unmodifiableSet(new HashSet<String>())
... aber scheint hässlich, und ich möchte eine Google -Sammlungsstraße finden.
Lösung
Versuche dies:
ImmutableSet.<String>of()
Dies wird auch funktionieren:
Collections.<String>emptySet()
Diese Syntax ist nützlich, um die Typ -Argumente zu manuell anzugeben, wenn der Typ -Inferenz fehlschlägt. :-)
Andere Tipps
Dies wird auch funktionieren:
public static void main(String[] args) {
Set<String> emptySet = ImmutableSet.of();
doStuffWith(emptySet);
}
static void doStuffWith(Set<String> strings) {
// ...
}
Weil der Typ -Inferenz bemerkt, dass Sie a zuweisen Set<String>
Variable und weiß, dass der Typparameter sein muss String
.