如何覆盖scala def close():java中的Future [Unit]

时间:2015-09-18 16:00:46

标签: java scala

标题说明了一切。我似乎无法从java编译它,我需​​要覆盖函数

def close(): Future[Unit] 

但我需要在java中这样做。

感谢,

1 个答案:

答案 0 :(得分:5)

简短回答:从Java开始,您需要对scala.runtime.BoxedUnit的Scala类使用Unit

给出像

这样的Scala类
abstract class ScalaFoo {
  def close(): Future[Unit]
}

你的Java类必须像这样扩展它:

class JavaFoo extends ScalaFoo {
    @Override
    public Future<BoxedUnit> close() {
        return null;
    }
}

这种间接的原因是Scala's Type Hierarchy的怪癖:Unitscala.AnyVal(而不是scala.AnyRef / java.lang.Object)因此具有没有方便的Java等价物。