2010-12-10 19 views
1

Je veux construire ImmutableSortedSet. J'ai écrit smt de code comme:Construire ImmutableSortedSet sans avertissements

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 (Comparator) du ImmutableSortedSet de type doit être accessible de manière statique

Comment puis-je supprimer cet avertissement sans @SuppressWarnings("static-access")? Merci.

+0

Aïe! Est-ce que quelqu'un sait, est-ce que javac et eclipse donnent cet avertissement? (Veuillez dire oui.) –

+0

@Kevin Bourrillion, eclipse do. mais pas mon javac. –

Répondre

4

Il vous donne cet avertissement car orderedBy est une méthode statique que vous appelez sur une instance de ImmutableSortedSet. Cela signifie souvent que vous pensez faire quelque chose alors que vous faites autre chose, et c'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 veniez d'appeler 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 posté au départ (qui a le même résultat):

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

Merci beaucoup. J'accepterai cette réponse après 5 minutes. –

+2

Avertissements rock! :-) –

3

Après en regardant les documents Guava ImmutableSortedSet, il semble que vous vouliez réellement l'une des autres surcharges à copyOf.

Plus précisément, vous voulez la copyOf(Comparator, Collection) surcharge:

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

Merci. Je ferai comme tu dis. Mais je promets d'assept @ réponse de ColinD ( –

+0

Vous avez raison, cette méthode est la bonne à utiliser pour ce que l'auteur veut faire, même si le résultat final est le même. – ColinD