Как получить доступ к объекту 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$