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