Что здесь неконтролируемой и небезопасной работы?
-
19-09-2019 - |
Вопрос
У меня есть следующий код:
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