Costruire ImmutableSortedSet senza avvisi
-
08-10-2019 - |
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.
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);