Construire ImmutableSortedSet sans avertissement
-
08-10-2019 - |
Question
Je veux construire ImmutableSortedSet
. J'ai écrit comme smt de code:
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();
mais il génère avertissement:
La méthode statique OrderedBy (Comparatif) à partir du Type ImmutableSortedSet devrait sont accessibles d'une manière statique
Comment puis-je supprimer cet avertissement sans @SuppressWarnings("static-access")
? Merci.
La solution
Il te donne cet avertissement parce orderedBy
est une méthode statique et vous l'appelez sur une instance de ImmutableSortedSet
. Cela signifie souvent que vous pensez que vous faites une chose quand vraiment que vous faites autre chose, et qui est le cas ici.
Le résultat est que ce code ne va pas faire ce que vous pensez qu'il fait ... il va jeter le ImmutableSortedSet
créé par copyOf(obj)
(il est seulement utilisé pour accéder à la méthode statique orderedBy
, qui pourrait être utilisé directement ) et retourner un ensemble vide, comme si vous aviez appelé ImmutableSortedSet.orderedBy(myComparator).build()
.
Voici ce que vous voulez faire (comme R. Bemrose dit):
ImmutableSortedSet<String> ordered = ImmutableSortedSet.copyOf(myComparator, obj);
Pour la postérité, voici ce que je hâte d'abord posté (qui a le même résultat):
ImmutableSortedSet<String> ordered = ImmutableSortedSet.orderedBy(myComparator)
.addAll(obj).build();
Autres conseils
Après avoir examiné les documents ImmutableSortedSet
Goyave, il semble que vous voulez en fait l'un des autres à copyOf
surcharges.
, vous voulez Plus précisément, le copyOf(Comparator, Collection)
surcharge:
Set<String> ordered = ImmutableSortedSet.copyOf(myComparator, obj);