使用synchronizedList时键入安全警告

时间:2014-06-30 15:48:05

标签: java eclipse

我定义了一个类成员如下:

private static List abc = Collections.synchronizedList(new ArrayList());

但是Eclipse给了我警告:

Type safety: Unchecked invocation synchronizedList(ArrayList) of the generic method synchronizedList(List<T>) of type Collections

是否有另一种方法来编写此声明语句以避免警告?

4 个答案:

答案 0 :(得分:5)

您有一个原始类型警告,因为您使用new ArrayList()初始值设定项而未指定泛型类型。

自Java 5引入Java generics以来。

它们允许类型抽象和类型安全。

当您指定时,您的警告将消失:

private static List<MyType> abc = Collections.synchronizedList(new ArrayList<MyType>());

...其中MyTypeList所需的通用类型。

答案 1 :(得分:1)

正如其他人已经回答的那样,您可以在List声明 ArrayList构造函数中指定type参数。因此,感谢Java“泛型”,你必须在2个地方指定相同的类型 - 违反the DRY principle。 类型集合很有用,但有些情况下你不关心(甚至不知道)集合中的类型,“raw”类型的使用是完全有效和可接受的。

这就是为什么我通常在Eclipse中配置我的项目以禁用该警告。您可以通过右键单击项目,选择属性,然后导航到 Java编译器&gt;来执行此操作。 错误和警告。选中标有“启用项目特定设置”的复选框,然后找到通用类型部分,您可以在其中更改此警告。

enter image description here

如果要将此设置应用于整个工作区,请使用对话框顶部的配置工作区设置... 链接。

我确信有些人会不同意我对此的立场,但我发现坚持认为类型参数总是更好地过于教条而忽略了这样一个事实,即很多情况下不需要类型参数并且只是使代码混乱。

答案 2 :(得分:0)

这样的事情会起作用:

    private static List<String> abc = Collections.synchronizedList(new ArrayList<String>());

用你正在使用的任何组件类型替换<String>

答案 3 :(得分:0)

@SuppressWarnings("rawtypes")放在方法之上。