您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么在不使用泛型运算符时不能推断出类型?

为什么在不使用泛型运算符时不能推断出类型?

编译器不会 推断 类型,因为您正在实例化 raw ArrayList。但是它足够聪明,可以警告您在使用此(原始)对象时可能会出现问题。

值得一提的是此警告背后的原因。由于类型擦除<Integer>有关List变量的参数信息()将在运行时完全消失,此时变量将保留type元素Object。考虑以下代码段:

List rawList = new ArrayList(); //raw list
rawList.add(new String("hello"));
rawList.add(new Double(12.3d));
List<Integer> intList = rawList; // warning!

代码段将编译,但不会生成任何警告。有一个原始列表(rawList),您可以添加任何非原始类型到列表中,包括StringDouble等等。但是这种分配收集到一个列表,该列表指定举行时 整数,那么这是一个问题。在运行时,ClassCastException当您尝试从中获取某些元素时会得到aintList,这应该是Integer,但实际上是a String或其他。

长话短说- 将原始类型与泛型混用!

在您的情况下,如果您使用菱形,则编译器 会推断出类型:

List<Integer> list = new ArrayList<>(); //¯\_(ツ)_/¯
                                  ↑↑
其他 2022/1/1 18:32:32 有427人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶