Java 隐式转换、重写、互操作性

Java 隐式转换、重写、互操作性,java,scala,scala-java-interop,Java,Scala,Scala Java Interop,我有以下Java类: public class GeneralClass { public Integer getInt(Double d) { return d.intValue(); } } 我想在scala中扩展这个类 import scala.collection.JavaConversions._ import scala.collection.JavaConverters._ class SpecializedClass extends Gener

我有以下Java类:

public class GeneralClass {
    public Integer getInt(Double d) {
        return d.intValue();
    }
}
我想在scala中扩展这个类

import scala.collection.JavaConversions._
import scala.collection.JavaConverters._

class SpecializedClass extends GeneralClass {

  override def getInt(d: Double): Int = {
    d.intValue()
  }
}
问题是scala.Double和scala.Int都不会自动转换为各自的java类型

编辑 错误消息是:

方法getInt不重写任何内容。注:类的超类 SpecializedClass包含以下名为 getInt:def getInt(d:Double):整数

有谁能解释一下,并指出一个优雅的解决方案吗?

试试看

override def getInt(d: Double): Integer = {
   return Integer.valueOf(d.intValue()); // explicit boxing
}

它实际上不会覆盖现有的方法(因为类型不同)

因此,一种可能是删除
覆盖

另一方面,如果您真的想使用
override
关键字:

override def getInt(d: java.lang.Double): java.lang.Integer = {
  d.intValue()
}

一般来说,在Java/Scala互操作性中使用基本数据类型可能很棘手:下面是另一个处理基本数据类型的示例。

SpecializedClass
中的
getInt
不会覆盖
GeneralClass
中的方法。为了能够重写,
SpecializedClass
中的函数参数应该是逆变的,返回类型应该是协变的。在你的情况下不是这样的


因此,除非您在
getInt
中的
SpecializedClass
中有某种东西,它接受类型
T:>java.lang.Double
,返回类型为
T,否则我认为您的答案与我所寻找的最接近。你能提供一些支持它的参考资料吗?我写了一篇关于协方差和逆方差的小文章。希望它会有用。对于隐式,是最好的参考。