我试图了解如何将Double
的{{1}}值变成ArrayList
。 Integer
是numList
的{{1}},其值是ArrayList
。
这是代码:
Integer
这将编译并运行而不会出现错误。
答案 0 :(得分:21)
这是由于type erasure used with Java generics所致-仅在编译时对泛型类型执行类型检查,然后擦除了泛型的类型信息,从而有效地将List<Integer>
转换为List<Object>
。
我的IDE警告您“从Double到T的未经检查的转换”。但是编译器无法确定您的代码是否错误,因此它不会发出错误,而只是警告。
然后,在运行时,由于类型擦除而不再存在类型检查,因此,除非您执行某些由于运行时类型不兼容而失败的操作,否则代码将无错误运行。 System.out.println()
不是这样的操作。
如果您将打印代码更改为
Integer num = numList.get(0);
System.out.println(num);
这现在将涉及运行时类型检查,因此将失败:
java.lang.ClassCastException:java.lang.Double无法转换为java.lang.Integer