Scala:为什么classOf [Int] .cast(1)会抛出java.lang.ClassCastException?

时间:2015-01-09 23:43:21

标签: scala

当我在Scala 2.10 REPL上运行以下命令时:

classOf[Int].cast(1)

我收到以下错误:

java.lang.ClassCastException: Cannot cast java.lang.Integer to int
at java.lang.Class.cast(Class.java:3176)
at .<init>(<console>:18)
...

为什么会这样?

1 个答案:

答案 0 :(得分:2)

这是因为 autoboxing 。这是一个常见的功能,不仅可以在Scala中找到,还可以在Java中找到。 int值需要作为对象传递给cast方法。但是int不是对象,因此编译器会将转换引入java.lang.Integer的实例。这与int的类型不同,它就是那么简单。

这个应该有效:

classOf[java.lang.Integer].cast(1)