Что такое непроверенная и небезопасная операция здесь? - PullRequest
5 голосов
/ 10 марта 2010

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

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.

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

Кто-нибудь знает, что здесь происходит?

Ответы [ 2 ]

9 голосов
/ 10 марта 2010

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

 Set<String> tmpSet = new HashSet<String>();
2 голосов
/ 10 марта 2010

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

Например:

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

...