2013-02-19 4 views
4

Я использую библиотеку scala из java, в частности функцию, которая возвращает Either[A, B]. В моем Java коде, который я могу сделать:Использование scala.Iither из Java

scalaFunction.callMethod(new Function<Either<A, B>>() { 
    public byte[] apply(Either<A, B> result) { 
     B right = result.right().??? 
    } 
} 

result.right() возвращает RightProjection, но я не могу импортировать, что в Java (с помощью IntelliJ). Есть ли способ справиться с любыми объектами в Java?

ответ

1

Я не тестировал это, но в соответствии с ScalaDoc для RightProjection вы можете позвонить get(). Обратите внимание, что это исключает исключение, если result не является Right.

Чтобы работать со классами Scala в среде IDE, IDE должна знать о них. Таким образом, вам нужно добавить scala-library.jar в путь сборки, указанный в вашей среде IDE. Для IDE (и компилятора Java и среды исполнения) Scala - это просто обычная библиотека, которая является зависимостью от всех библиотек и программ, написанных на Scala.

+0

Проблема в том, что я даже не могу импортировать RightProjection из Java. Так что результат result.right(). Get() не будет компилироваться. Я предполагаю, что RightProjection вложен в объект «Лицо сопутствующего» в исходном файле, поэтому он скрыт от перспективы Java? – user378465

+1

Ваша IDE должна показывать вам тип возврата 'right()', использовать это для импорта. Я предполагаю, что это 'scala.util.Either $ RightProjection' или' scala.util.Either $ RightProjection $ '. –

+0

Включили ли вы файл Scala JAR в вашу среду IDE? Если нет, сделайте это, тогда он должен работать. Вам нужно 'scala-library.jar', он содержит байтовый код для соответствующих классов. –

0

RightProjection и LeftProjection - это вложенные классы, определенные в пределах object Either (не внутренний класс class Either). Вам придется отслеживать кодировку объектов Scala для классов JVM. Я думаю, что это имя объекта с добавленным $ и некоторыми другими материалами ... Тогда класс JVM-уровня RightProjection будет тем, чье имя объединяет имя класса объекта и $ (другое, я думаю) и RightProjection.

Или что-то в этом роде. Мне никогда не приходилось копать это глубоко.

Магазин javap инструмент поможет вам отследить эту информацию.

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

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