如何从Java调用Scala包对象上定义的方法? (Scala 2.10.x)

时间:2015-10-14 00:50:56

标签: java scala scala-java-interop

给定一个方法定义在(第三方,所以我不能只是移动它)Scala包对象,如下:

package foo

package object bar {
  def doSomething(s: String): String = ???
}

我需要从Java代码中调用doSomething。我知道,一般来说,我可以使用ScalaObject$.method()从Java获取Scala伴随对象的方法。但是,上面的示例编译为foo.bar.package$.class,当然Java尖叫关于包是保留字。

有没有办法直接从Java调用它?

2 个答案:

答案 0 :(得分:3)

我能想出的最好的(工作,但很难看)是将doSomething包装在不在包对象中的Scala代码中,然后从我的Java代码中调用包装器。

object BarUtil {
  def wrapper(s: String) = foo.bar.doSomething(s)
}

和Java

public String doIt(String s) {
    return BarUtil$.wrapper(s);
}

答案 1 :(得分:3)

您可以foo.bar.package$.MODULE$访问包对象(请注意美元符号,不要删除它们):

foo.bar.package$.MODULE$.doSomething("hello")