Domanda

Voglio costrutto ImmutableSortedSet. Ho scritto il codice SMT come:

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();

ma genera avvertimento:

  

Il metodo statico   orderedBy (comparatore) dal   Tipo ImmutableSortedSet dovrebbe   accedere in modo statico

Come posso rimuovere questo avvertimento senza @SuppressWarnings("static-access")? Grazie.

È stato utile?

Soluzione

E 'ti dà quel avviso perché orderedBy è un metodo statico e si sta chiamando su un'istanza di ImmutableSortedSet. Questo spesso significa che si pensi di fare una cosa, quando in realtà si sta facendo qualcosa di diverso, e questo è il caso qui.

Il risultato è che questo codice non ha intenzione di fare quello che pensi lo fa ... sta andando a buttare via il ImmutableSortedSet creato da copyOf(obj) (è solo di essere utilizzato per accedere al metodo statico orderedBy, che potrebbe essere utilizzato direttamente ) e restituire un insieme vuoto, come se si fosse appena chiamato ImmutableSortedSet.orderedBy(myComparator).build().

Ecco cosa si vuole fare (come diceva R. Bemrose):

ImmutableSortedSet<String> ordered = ImmutableSortedSet.copyOf(myComparator, obj);

Ai posteri, ecco cosa ho fretta postato inizialmente (che ha lo stesso risultato):

ImmutableSortedSet<String> ordered = ImmutableSortedSet.orderedBy(myComparator)
    .addAll(obj).build();

Altri suggerimenti

Dopo aver esaminato la documentazione ImmutableSortedSet Guava, sembra che si desidera veramente uno degli altri sovraccarichi di copyOf.

In particolare, si desidera che il copyOf(Comparator, Collection) sovraccarico:

Set<String> ordered = ImmutableSortedSet.copyOf(myComparator, obj);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top