2015-10-14 7 views
3

Учитывая метод, определенный на (3-й партии, так что я не могу просто переместить его) пакет Scala объект, например, так:Как я могу вызвать метод, определенный на объекте пакета Scala из Java? (Scala 2.10.x)

package foo 

package object bar { 
    def doSomething(s: String): String = ??? 
} 

Мне нужно позвонить doSomething из Java кода. Я знаю, что в общем, я могу получить методы объекта Companion объекта Scala из Java, используя ScalaObject$.method(). Однако приведенный выше пример компилируется до foo.bar.package$.class, и, конечно же, Java кричит о том, что пакет является зарезервированным словом.

Есть ли способ вызвать это прямо из Java?

ответ

3

Вы можете получить доступ к объекту пакета как foo.bar.package$.MODULE$ (обратите внимание на знаки доллара, не удаляйте их):

foo.bar.package$.MODULE$.doSomething("hello") 
3

Лучшее, что я могу придумать (работает, но уродливо), - это обернуть doSomething в коде Scala, который не находится в объекте пакета, а затем вызвать оболочку из моего кода Java.

object BarUtil { 
    def wrapper(s: String) = foo.bar.doSomething(s) 
} 

и в Java

public String doIt(String s) { 
    return BarUtil$.wrapper(s); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^