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.

¿Fue útil?

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top