[英]How can I call a method defined on a Scala package object from Java? (Scala 2.10.x)
Given a method defined on a (3rd party, so I can't just move it) Scala package object, like so: 给定一个方法(第三方,所以我不能只是移动它)Scala包对象,如下所示:
package foo
package object bar {
def doSomething(s: String): String = ???
}
I need to call doSomething
from Java code. 我需要从Java代码调用doSomething
。 I know that in general, I can get at a Scala companion object's methods from Java using ScalaObject$.method()
. 我知道,一般来说,我可以使用ScalaObject$.method()
从Java获取Scala伴随对象的方法。 However, the example above compiles to foo.bar.package$.class
, and of course Java screams about package being a reserved word. 但是,上面的示例编译为foo.bar.package$.class
,当然Java尖叫关于包是保留字。
Is there a way to call this from Java directly? 有没有办法直接从Java调用它?
The best I can come up with (works, but ugly) is to wrap doSomething
in Scala code that's not in a package object, and then call the wrapper from my Java code. 我能想到的最好的(工作,但很丑陋)是在Scala代码中包装doSomething
,而不是在包对象中,然后从我的Java代码中调用包装器。
object BarUtil {
def wrapper(s: String) = foo.bar.doSomething(s)
}
and in Java 在Java中
public String doIt(String s) {
return BarUtil$.wrapper(s);
}
您可以访问包对象foo.bar.package$.MODULE$
(注意美元符号,不要删除它们):
foo.bar.package$.MODULE$.doSomething("hello")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.