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.

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top