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

时间:2010-12-29 10:09:26

标签: java scala

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

package object domain { object Foo }  domain$.MODULE$.Foo$.MODULE$ 

2 个答案:

答案 0 :(得分:4)

从Scala 2.8.1开始,这可能已经发生了变化,但建议的domain$Foo$.MODULE$不起作用。您必须使用domain.package$Foo$.MODULE$

对于对象,方法等,它有点不同。鉴于scala类:

package object domain {
  object foo
  def bar = 42
  val baz = 1.0
}

您可以在Java中访问foobarbaz,如:

domain.package$foo$.MODULE$
domain.package$.MODULE$.bar()
domain.package$.MODULE$.baz()

虽然我试图解决这个问题,但我认为我们遇到了麻烦,因为Scala生成了一个名为package的类,当然你无法用Java导入。幸运的是,我们只需要您可以导入的package$随播广告对象。

答案 1 :(得分:0)

如果您查看Scala库中对象中的对象,例如scala.math.Ordering.Boolean,您可以使用scala.math.Ordering$Boolean$.MODULE$从Java获取它。在这方面,我认为没有理由为什么包对象不应该像普通对象那样,因此Foo实例应该是domain$Foo$.MODULE$