2010-03-10 28 views
5

我有以下代码:什么是未检查和不安全的操作?

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();前。

有人知道这里发生了什么吗?

回答

9

是的,你正在创建一个新的HashSet而没有说明它应该包含什么类,然后声明它包含字符串。将其更改为

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

当您使用支持新的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参数添加到编译器,yo你得到关于这个问题的具体细节。

有关更多详细信息,请参阅此处:http://forums.sun.com/thread.jspa?threadID=584311

相关问题