Что неконтролируемо и небезопасная операция здесь?

У меня есть следующий код:

private static final Set<String> allowedParameters;
static {
    Set<String> tmpSet = new HashSet();
    tmpSet.add("aaa");
    allowedParameters = Collections.unmodifiableSet(tmpSet);
}

И это вызывает:

Note: mygame/Game.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

И когда я перекомпилировал с предложенной опцией, я вижу указатель (^) указывающий на "новый" перед HashSet();.

Кто-либо знает то, что продолжается здесь?

5
задан Roman 10 March 2010 в 17:48
поделиться

2 ответа

Да, вы создаете новый HashSet, не указывая, какой класс он должен содержать, а затем утверждаете, что он содержит строки. Измените его на

 Set<String> tmpSet = new HashSet<String>();
9
ответ дан 13 December 2019 в 19:25
поделиться

эти сообщения появляются, когда вы используете классы, которые поддерживают новую функцию J2SE 1.5 - дженерики. Вы получаете их, когда явно не указываете тип содержимого коллекции.

Например:

List l = new ArrayList();
list.add("String");
list.add(55);

Если вы хотите иметь коллекцию одного типа данных, вы можете избавиться от сообщений следующим образом:

List<String> l = new ArrayList<String>();
list.add("String");

Если вам нужно поместить несколько типов данных в единую коллекцию, вы сделаете:

List<Object> l = new ArrayList<Object>();
list.add("String");
list.add(55);

Если вы добавите в компилятор параметр -Xlint: unchecked, вы получите конкретную информацию о проблеме.

подробнее см. Здесь: http://forums.sun.com/thread.jspa?threadID=584311

2
ответ дан 13 December 2019 в 19:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: