简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM