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

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

Вопрос

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

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();.

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

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

Решение

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

 Set<String> tmpSet = new HashSet<String>();

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

эти сообщения возникают, когда вы используете классы, поддерживающие новую функцию 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top