2012-04-18 4 views
4

Я не могу ссылаться на классы Scala из кода Java при использовании Eclipse IDE. Рассматриваемый класс Scala вложен в структуру Scala-объекта. При попытке использовать класс в Java-коде Eclipse жалуется на использование двоичного имени.Scala объектно-вложенные классы в Eclipse Java

Ниже приведен пример Scala код, определяющий класс интереса (Inner):

package mypackage; 

object Outer { 
    object Middle { 
    class Inner { 
     def msg() { 
     println("Running"); 
     } 
    } 
    } 
} 

Для использования класса Inner в Java коде, я использую следующий код:

mypackage.Outer$Middle$Inner inner = new mypackage.Outer$Middle$Inner(); 
inner.msg(); 

Однако , Компилятор Eclipse (Indigo) жалуется со следующим сообщением в первой строке:

Вложенный тип mypackage.Outer $ Средний $ Inner нельзя ссылаться, используя его имя бинарного

Интересно, что код Java выше, работает при использовании NetBeans 6.9.1.

Это проблема с компилятором Eclipse? Существуют ли флаги, позволяющие использовать двоичные имена? Или, альтернативно, это проблема с Scala или тем, как я ее использую?

ответ

1

Доступ к глубоким вложенным объектам с Java невозможен. Ни в Eclipse, ни в командной строке, ни в любом инструменте построения. Перевод байт-кода теряет информацию о вложенности.

Eclipse не позволяет использовать имена $, поэтому он будет жаловаться. Если вам небезразличен Java-взаимодействие, вы должны придерживаться Java-подобной Scala на границах. Классы верхнего уровня, чистые черты или абстрактные классы, методы более высокого порядка и т. Д.

+0

Так же, что Netbeans удалось запустить код только как удачное исключение на их стороне? –

+0

Я был бы очень удивлен, если это произойдет. Каков синтаксис, который работает в Netbeans? –

+0

Точно синтаксис, как описано в вопросе. Я создаю банку Scala и использую ее в проекте Java NetBeans. Я добавил исполняемый пример в GitHub: http://github.com/andriusvelykis/scala-nested-class-netbeans –