Конструировать неизменности без предупреждений
-
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);