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

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

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

Ответы [ 2 ]

4 голосов
/ 09 марта 2011

Возможно, это изменилось в 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, который, конечно, вы не можете импортироватьна Яве.К счастью, нам нужен только сопутствующий объект package$, который вы можете импортировать.

0 голосов
/ 29 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...