¿Pasando inmutabilidad en lugar del set?
-
23-09-2019 - |
Pregunta
Tengo un método que espera un parámetro establecido. Quiero pasar en un conjunto vacío, y no quiero ningún efecto secundario en el conjunto.
Puedo hacer esto con colecciones pasando:
Collections.unmodifiableSet(Sets.newHashSet())
Pero quiero pasar:
ImmutableSet.of()
Si hago el primero un Set<Object>
se crea y obtengo "el método no aplicable para el error de args set '. Si hago este último ImmutableSet<Object>
se crea y obtengo un error similar.
Esto funciona:
Collections.unmodifiableSet(new HashSet<String>())
... pero parece feo, y quiero encontrar una forma de colecciones de Google.
Solución
Prueba esto:
ImmutableSet.<String>of()
Esto también funcionará:
Collections.<String>emptySet()
Esta sintaxis es útil para especificar manualmente argumentos de tipo cada vez que falla la inferencia de tipo. :-)
Otros consejos
Esto también funcionará:
public static void main(String[] args) {
Set<String> emptySet = ImmutableSet.of();
doStuffWith(emptySet);
}
static void doStuffWith(Set<String> strings) {
// ...
}
porque el tipo de inferencia se da cuenta de que está asignando a un Set<String>
variable y sabe que el parámetro de tipo debe ser String
.