我有一个Java方法,它接受一个java.lang.Object。 现在,我试图将Scala Int传递给它,但是编译器抱怨Int和Object的类型不匹配。
这感觉很奇怪,因为我认为Scala Int继承自AnyRef,并且应该与java.lang.Object相同?
答案 0 :(得分:1)
Scala Int
没有扩展AnyRef
,但是-它扩展了AnyVal
,与Java.lang.Object不兼容,更像Java {{1} }。 Scala还具有int
类,它只是Integer
的别名-如果需要将其作为对象传递,请使用该类。
答案 1 :(得分:1)
从Scala根类继承的Scala类有两个分支-任何:
(请参见https://docs.scala-lang.org/tour/unified-types.html中的图)
AnyRef等效于java.lang.Object。因此,在调用采用Object的Java方法时,装箱前不能直接传输AnyVal。这可以通过显式类型声明完成:
JavaClass.methodWithObject(10:java.lang.Integer)
更多讨论参考: Result type of an implicit conversion must be more specific than AnyRef