如何从Java访问scala包对象中包含的对象Foo
?
package object domain { object Foo } domain$.MODULE$.Foo$.MODULE$
答案 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中访问foo
,bar
和baz
,如:
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$