当我在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)
...
为什么会这样?
答案 0 :(得分:2)
这是因为 autoboxing 。这是一个常见的功能,不仅可以在Scala中找到,还可以在Java中找到。
int
值需要作为对象传递给cast
方法。但是int
不是对象,因此编译器会将转换引入java.lang.Integer
的实例。这与int
的类型不同,它就是那么简单。
这个应该有效:
classOf[java.lang.Integer].cast(1)