
编译器不会 推断 类型,因为您正在实例化 raw
ArrayList。但是它足够聪明,可以警告您在使用此(原始)对象时可能会出现问题。
值得一提的是此警告背后的原因。由于类型擦除,
<Integer>有关
List变量的参数信息()将在运行时完全消失,此时变量将保留type元素
Object。考虑以下代码段:
List rawList = new ArrayList(); //raw listrawList.add(new String("hello"));rawList.add(new Double(12.3d));List<Integer> intList = rawList; // warning!该代码段将编译,但不会生成任何警告。有一个原始列表(
rawList),您可以添加任何非原始类型到列表中,包括
String,
Double等等。但是这种分配收集到一个列表,该列表指定举行时
只有 整数,那么这是一个问题。在运行时,
ClassCastException当您尝试从中获取某些元素时会得到a
intList,这应该是
Integer,但实际上是a
String或其他。
长话短说- 不要 将原始类型与泛型混用!
在您的情况下,如果您使用菱形,则编译器 可能 会推断出类型:
List<Integer> list = new ArrayList<>(); //¯_(ツ)_/¯ ↑↑
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)