如何从Java访问Scala包对象中包含的对象Foo?

Fré*_*wak 10 java scala

如何Foo从Java 访问scala包对象中包含的对象?

package object domain { object Foo }  domain$.MODULE$.Foo$.MODULE$ 
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 5

也许从 Scala 2.8.1 开始这已经改变了,但是提议的domain$Foo$.MODULE$不起作用。你必须使用domain.package$Foo$.MODULE$.

对于对象、方法等来说有点不同。给定 scala 类:

package object domain {
  object foo
  def bar = 42
  val baz = 1.0
}
Run Code Online (Sandbox Code Playgroud)

您可以在 Java 中访问foo,bar和 ,如下所示:baz

domain.package$foo$.MODULE$
domain.package$.MODULE$.bar()
domain.package$.MODULE$.baz()
Run Code Online (Sandbox Code Playgroud)

当我试图弄清楚这一点时,我认为我们遇到了麻烦,因为 Scala 生成了一个名为 的类package,当然您不能在 Java 中导入该类。幸运的是,我们只需要package$伴生对象,您可以导入它。