什么是未经检查和不安全的操作?

时间:2010-03-10 17:48:33

标签: java generics collections hashset

我有以下代码:

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();前面看到指向“new”的指针(^)。

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

2 个答案:

答案 0 :(得分:9)

是的,你正在创建一个新的HashSet而不说明它应该包含哪个类,然后断言它包含字符串。将其更改为

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

答案 1 :(得分: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参数添加到编译器,则会获得有关该问题的具体详细信息。

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