Как получить доступ к объекту Foo, содержащемуся в объекте пакета scala из Java?

Как получить доступ к объекту Foo содержится в объекте пакета scala из Java?

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

2 ответов


возможно, это изменилось по состоянию на Scala 2.8.1, но предлагаемое domain$Foo$.MODULE$ не работает. Вы должны использовать domain.package$Foo$.MODULE$.

и это немного отличается для объектов, методов и т. д. Учитывая класс scala:

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

вы можете получить доступ к foo, bar и baz в Java, как:

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

пока я пытался понять это, я думал, что у нас проблемы, потому что Scala генерирует класс с именем package, что, конечно, вы не можете импортировать в Java. К счастью, нам нужно только package$ сопутствующий объект, который можно импортировать.


если вы посмотрите на объект в объекте в Scala lib, например scala.math.Ordering.Boolean, вы можете получить его из Java, используя scala.math.Ordering$Boolean$.MODULE$. Я не вижу причин, почему объекты пакета не должны вести себя как обычные объекты в этом отношении, поэтому ваш Foo экземпляр должен быть domain$Foo$.MODULE$