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

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

4

2 回答 2

9

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

 Set<String> tmpSet = new HashSet<String>();
于 2010-03-10T17:51:55.313 回答
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

于 2010-03-10T17:53:13.717 回答