Как исправить предупреждение о непроверенных вызовах в Java?

Вот код, который я написал?

Set keys = map.keySet();
SortedSet s = new TreeSet(keys);

Предупреждение, которое я получаю:

warning: [unchecked] unchecked call to TreeSet(java.util.Collection<? extends E>) as a
         member of the raw type java.util.TreeSet

Как мне избавиться от предупреждения компилятора?

Ответ 1

В идеале, начните использовать генерики полностью. Вы не показали тип map, но в идеале вы должны написать что-то вроде:

Set<String> keys = map.keySet();
SortedSet<String> s = new TreeSet<String>(keys);

Это было бы в случае, когда map было чем-то вроде Map<String, Integer>.

Если map сам является сырым типом, это сложнее - опять же, лучшим решением было бы начать добавление генериков по всей вашей базе кода, избавление от необработанных типов. Это не всегда возможно, если карта возвращается из кода третьей стороны, конечно. В этом случае вам может потребоваться подавить предупреждения на одной строке при преобразовании из необработанных типов в общие типы - возможно, через Collections.checkedCollection, но после этого вы должны иметь возможность работать с общим типом "правильно". Например:

@SuppressWarnings("unchecked") // Just for this one statement
Collection<String> keys = Collections.checkedCollection(map.keySet(),
                                                        String.class);

// Now this statement is fully generic with no warnings
SortedSet<String> s = new TreeSet<String>(keys);

Ответ 2

Что касается этой проблемы, вы должны использовать параметризованный тип ключей, например

Set<TypeOfKeyObject> keys = map.keySet();
SortedSet<TypeOfKeyObject> s = new TreeSet<TypeOfKeyObject>(keys);

где TypeOfKeyObject - тип объекта Key в вашем объекте map.

вы можете заставить подавлять предупреждения (как это было правильно предложено), но не рекомендуется.

Рискуя проявлять снисходительность, я предлагаю вам изучить дженерики. Хорошей отправной точкой было бы следующее: http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html