如何将双精度型添加到Integer的ArrayList中? (Java)

时间:2019-03-28 11:45:20

标签: java generics arraylist

我试图了解如何将Double的{​​{1}}值变成ArrayListIntegernumList的{​​{1}},其值是ArrayList

这是代码:

Integer

这将编译并运行而不会出现错误。

1 个答案:

答案 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