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

Scala: Why does classOf[Int].cast(1) throw a java.lang.ClassCastException?

当我 运行 在 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)
...

为什么会这样?

这是因为自动装箱。它是一个常见的特性,不仅存在于 Scala 中,而且存在于 Java 中。 int 值需要作为对象传递给 cast 方法。但是 int 不是对象,因此编译器引入了对 java.lang.Integer 实例的转换。这与 int 不同,就这么简单。

这个应该有效:

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