gpt4 book ai didi

java - 在 Java 7 中使用非参数化泛型类型有什么问题?

转载 作者:行者123 更新时间:2023-12-01 08:12:49 31 4
gpt4 key购买 nike

如果我想要一个可以用任何类型实例化的变量(例如列表)怎么办?

所以,鉴于:

List list;

我可以做以下任何事情:

list = new ArrayList<String>();
list = new Vector<Integer>();
list = new LinkedList<HashMap>();

编辑:或者,我可能正在使用返回原始列表的库。例如,在 hibernate 中:

List result = session.createQuery( "from Event" ).list();

当我想使用 List list 时,Eclipse 给了我这个警告:

List is a raw type. References to generic type List<E> should be parameterized

为什么要避免这种情况?

最佳答案

Eclipse gives me this error when I want to do the above:

我相信 Eclipse 会给您一个警告(黄色下划线),而不是错误(红色下划线)。

List is a raw type. References to generic type List should be parameterized

Why should this be avoided?

对泛型类型的引用应该参数化,因为它们提供更强的类型。这将帮助您在编译时检测到一些只能在执行时检测到的问题。

例如:

List myIntegerList = new ArrayList();
myIntegerList.add(1);
myIntegerList.add("bad bad String");

编译不会出现问题;但在执行时会给你一个错误。另一边:

List<Integer> myIntegerList = new ArrayList<Integer>();
myIntegerList.add(1);
myIntegerList.add("bad bad String"); // compiler will show an error here

永远不会编译,因为当尝试将String添加到IntegerList时,它会显示明显的错误。

关于java - 在 Java 7 中使用非参数化泛型类型有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15962742/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com