如何从 Java 调用 Scala 包对象上定义的方法? (Scala 2.10.x)
How can I call a method defined on a Scala package object from Java? (Scala 2.10.x)
给定一个在(第 3 方,所以我不能只移动它)Scala 包对象上定义的方法,如下所示:
package foo
package object bar {
def doSomething(s: String): String = ???
}
我需要从 Java 代码调用 doSomething
。我知道一般来说,我可以使用 ScalaObject$.method()
从 Java 获取 Scala 伴随对象的方法。但是,上面的示例编译为 foo.bar.package$.class
,当然 Java 尖叫着 package 是保留字。
有没有办法直接从 Java 调用它?
我能想出的最好办法(可行,但很丑)是将 doSomething
包装在不在包对象中的 Scala 代码中,然后从我的 Java 代码中调用包装器。
object BarUtil {
def wrapper(s: String) = foo.bar.doSomething(s)
}
并在 Java
public String doIt(String s) {
return BarUtil$.wrapper(s);
}
您可以通过 foo.bar.package$.MODULE$
访问包对象(注意美元符号,不要删除它们):
foo.bar.package$.MODULE$.doSomething("hello")
给定一个在(第 3 方,所以我不能只移动它)Scala 包对象上定义的方法,如下所示:
package foo
package object bar {
def doSomething(s: String): String = ???
}
我需要从 Java 代码调用 doSomething
。我知道一般来说,我可以使用 ScalaObject$.method()
从 Java 获取 Scala 伴随对象的方法。但是,上面的示例编译为 foo.bar.package$.class
,当然 Java 尖叫着 package 是保留字。
有没有办法直接从 Java 调用它?
我能想出的最好办法(可行,但很丑)是将 doSomething
包装在不在包对象中的 Scala 代码中,然后从我的 Java 代码中调用包装器。
object BarUtil {
def wrapper(s: String) = foo.bar.doSomething(s)
}
并在 Java
public String doIt(String s) {
return BarUtil$.wrapper(s);
}
您可以通过 foo.bar.package$.MODULE$
访问包对象(注意美元符号,不要删除它们):
foo.bar.package$.MODULE$.doSomething("hello")