Construir ImmutableSortedSet sin advertencias
-
08-10-2019 - |
Pregunta
Quiero ImmutableSortedSet
constructo. Escribí código SMT como:
Set<String> obj = new HashSet<String>();
Comparator<String> myComparator = new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
return 0;
}
};
Set<String> ordered = ImmutableSortedSet.copyOf(obj)
.orderedBy(myComparator).build();
pero genera la advertencia:
El método estático orderedBy (Comparador) de la Tipo ImmutableSortedSet debe puede acceder de una manera estática
¿Cómo puedo eliminar esta advertencia sin @SuppressWarnings("static-access")
? Gracias.
Solución
Se le está dando esta advertencia porque orderedBy
es un método estático y que está llamando en una instancia de ImmutableSortedSet
. A menudo, esto significa que usted cree que está haciendo una cosa cuando en realidad estás haciendo algo más, y ese es el caso aquí.
El resultado es que este código no va a hacer lo que usted cree ... que va a tirar la ImmutableSortedSet
creado por copyOf(obj)
(sólo está siendo utilizado para acceder al método estático orderedBy
, que podría ser utilizado directamente ) y devolver un conjunto vacío, como si sólo hubiera llamado ImmutableSortedSet.orderedBy(myComparator).build()
.
Esto es lo que quiere hacer (como dijo R. Bemrose):
ImmutableSortedSet<String> ordered = ImmutableSortedSet.copyOf(myComparator, obj);
Para la posteridad, esto es lo que apresuradamente publicado inicialmente (que tiene el mismo resultado):
ImmutableSortedSet<String> ordered = ImmutableSortedSet.orderedBy(myComparator)
.addAll(obj).build();
Otros consejos
Después de mirar los documentos ImmutableSortedSet
guayaba, parece que usted quiere realmente una de las otras sobrecargas a copyOf
.
En concreto, desea que el copyOf(Comparator, Collection)
sobrecarga:
Set<String> ordered = ImmutableSortedSet.copyOf(myComparator, obj);