Конструировать неизменности без предупреждений

StackOverflow https://stackoverflow.com/questions/4410779

  •  08-10-2019
  •  | 
  •  

Вопрос

Я хочу построить 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();

Но он генерирует предупреждение:

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

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

Это было полезно?

Решение

Это дает вам это предупреждение, потому что 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();

Другие советы

ПОСМОТРЕТЬ ГУАВА ImmutableSortedSet Документы, кажется, вы действительно хотите, чтобы одна из других перегрузок copyOf.

В частности, вы хотите copyOf(Comparator, Collection) Перегрузка:

Set<String> ordered = ImmutableSortedSet.copyOf(myComparator, obj);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top