将Scala对象作为Java对象传递给Java方法

将Scala对象作为Java对象传递给Java方法,scala,Scala,我有一个Java方法,它接受Java.lang.Object。 现在我试图向它传递一个Scala Int,但是编译器抱怨Int和Object的类型不匹配 这感觉很奇怪,因为我假设Scala Int继承自AnyRef,应该与java.lang.Object相同?ScalaInt没有扩展AnyRef,但是它扩展了AnyVal,它与java.lang.Object不兼容,更像是javaInt。Scala还有Integer类,它只是java.lang.Integer的别名-如果需要将其作为对象传递,请使

我有一个Java方法,它接受Java.lang.Object。 现在我试图向它传递一个Scala Int,但是编译器抱怨Int和Object的类型不匹配


这感觉很奇怪,因为我假设Scala Int继承自AnyRef,应该与java.lang.Object相同?

Scala
Int
没有扩展
AnyRef
,但是它扩展了
AnyVal
,它与java.lang.Object不兼容,更像是java
Int
。Scala还有
Integer
类,它只是
java.lang.Integer
的别名-如果需要将其作为对象传递,请使用该类。

Scala
Int
没有扩展
AnyRef
,但是它扩展了
AnyVal
,这与java.lang.object不兼容,而且更像Java
int
。Scala还有
Integer
类,它只是
java.lang.Integer
的别名-如果需要将其作为对象传递,请使用该类。

从Scala根类继承了两个Scala类分支-任意:

  • AnyVal:所有基于值的类型,例如Int、Byte、Double。。。这是Java原始值类的对应项,即int、float。。。等等
  • AnyRef:所有基于引用的类型,例如字符串、列表,包括装箱的Java类型,例如Java.lang.Integer。。。等等
  • (参见中的图)

    AnyRef相当于java.lang.Object。因此,在调用获取对象的Java方法时,不能在装箱之前直接传输AnyVal。这可以通过显式类型声明完成:

    JavaClass.methodWithObject(10:java.lang.Integer)

    更多讨论请参阅:

    Scala根类继承了两个Scala类分支-任意:

  • AnyVal:所有基于值的类型,例如Int、Byte、Double。。。这是Java原始值类的对应项,即int、float。。。等等
  • AnyRef:所有基于引用的类型,例如字符串、列表,包括装箱的Java类型,例如Java.lang.Integer。。。等等
  • (参见中的图)

    AnyRef相当于java.lang.Object。因此,在调用获取对象的Java方法时,不能在装箱之前直接传输AnyVal。这可以通过显式类型声明完成:

    JavaClass.methodWithObject(10:java.lang.Integer)

    更多讨论请参阅:

    可能重复的可能重复的