【发布时间】:2019-01-02 16:42:19
【问题描述】:
我有一个接受 java.lang.Object 的 Java 方法。 现在我正在尝试将 Scala Int 传递给它,但编译器抱怨 Int 和 Object 的类型不匹配。
这感觉很奇怪,因为我认为 Scala Int 继承自 AnyRef 并且应该与 java.lang.Object 相同?
【问题讨论】:
标签: scala
我有一个接受 java.lang.Object 的 Java 方法。 现在我正在尝试将 Scala Int 传递给它,但编译器抱怨 Int 和 Object 的类型不匹配。
这感觉很奇怪,因为我认为 Scala Int 继承自 AnyRef 并且应该与 java.lang.Object 相同?
【问题讨论】:
标签: scala
Scala Int 没有扩展 AnyRef,但它扩展了 AnyVal,它与 java.lang.Object 不兼容,更像 Java int。 Scala 也有 Integer 类,它只是 java.lang.Integer 的别名 - 如果您需要将其作为对象传递,请使用该类。
【讨论】:
从 Scala 根类继承了两个 Scala 类 - 任意:
(参见https://docs.scala-lang.org/tour/unified-types.html中的图表)
AnyRef 等价于 java.lang.Object。因此,在调用Java方法取Object时,不能在装箱前直接调用AnyVal。这可以通过显式类型声明来完成:
JavaClass.methodWithObject(10: java.lang.Integer)
更多讨论参考: Result type of an implicit conversion must be more specific than AnyRef
【讨论】: