Построить ImmutableSortedSet без предупреждений - PullRequest
1 голос
/ 10 декабря 2010

Я хочу построить ImmutableSortedSet. Я написал код SMT, как:

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

но выдает предупреждение:

Статический метод заказал (компаратор) из Тип ImmutableSortedSet должен быть доступным в статическом режиме

Как я могу удалить это предупреждение без @SuppressWarnings("static-access")? Спасибо.

Ответы [ 2 ]

4 голосов
/ 10 декабря 2010

Это предупреждает вас, потому что orderedBy - статический метод, и вы вызываете его для экземпляра ImmutableSortedSet.Это часто означает, что вы думаете, что делаете что-то одно, а на самом деле делаете что-то другое, и это имеет место в данном случае.

В результате этот код не будет делать то, что вы думаете, он делает... он отбросит ImmutableSortedSet, созданный copyOf(obj) (он используется только для доступа к статическому методу orderedBy, который можно использовать напрямую), и вернет пустой набор, как если бы вы только что вызвали ImmutableSortedSet.orderedBy(myComparator).build().

Вот что вы хотите сделать (как сказал Р. Бемроуз):

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

Для потомков вот то, что я спешно опубликовал изначально (что дает тот же результат):

ImmutableSortedSet<String> ordered = ImmutableSortedSet.orderedBy(myComparator)
    .addAll(obj).build();
3 голосов
/ 10 декабря 2010

После просмотра документов Guava ImmutableSortedSet выясняется, что вы действительно хотите, чтобы одна из других перегрузок достигла copyOf.

В частности, вам нужна перегрузка copyOf(Comparator, Collection):

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