У меня есть следующий код:
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