使用scala.Java中的

使用scala.Java中的,java,scala,scala-java-interop,either,Java,Scala,Scala Java Interop,Either,我使用的是java中的scala库,特别是一个返回或[a,B]的函数。在java代码中,我可以执行以下操作: scalaFunction.callMethod(new Function<Either<A, B>>() { public byte[] apply(Either<A, B> result) { B right = result.right().??? } } scalaFunction.callMethod(新函数(){

我使用的是java中的scala库,特别是一个返回
或[a,B]
的函数。在java代码中,我可以执行以下操作:

scalaFunction.callMethod(new Function<Either<A, B>>() {
   public byte[] apply(Either<A, B> result) {
      B right = result.right().???
   }
}
scalaFunction.callMethod(新函数(){
公共字节[]应用(任一结果){
B right=结果。right()。???
}
}

result.right()
返回一个
RightProjection
,但我无法在Java中导入它(使用IntelliJ)。在Java中是否有适当的方法来处理这两个对象?

我没有测试这个,但根据ScalaDoc for,您应该能够调用
get()
。请注意,如果
结果
不是
正确的
,则会引发异常


为了在IDE中使用Scala类,IDE需要了解它们。因此,您需要将
Scala library.jar
添加到IDE中指定的构建路径中。对于IDE(以及Java编译器和运行时),Scala只是一个常规库,它是所有用Scala编写的库和程序的依赖项。

RightProjection
LeftProjection
都是在
对象中定义的嵌套类(也不是
类的内部类
)。您必须跟踪Scala对象到JVM类的编码。我认为它是附加了
$
和一些其他东西的对象名……那么JVM级别的
RightProjection
类将是一个名称结合了对象的类名和
$
(我认为是另一个)和
RightProjection
的类

或者类似的,我从来没有挖过这么深


stock
javap
工具可以帮助您跟踪这些信息。

问题是我甚至无法从Java导入RightProjection。因此,result.right().get()也可以无法编译。我猜RightProjection嵌套在源文件中的任意一个伴生对象中,因此它从Java透视图中隐藏了?您的IDE应该能够向您显示
right()的返回类型
,使用它进行导入。我猜它是
scala.util。或者$RightProjection
或者
scala.util。或者$RightProjection$
。您的IDE中包含scala JAR文件了吗?如果没有,那么它应该可以工作。您需要
scala library.JAR
,它包含相关类的字节码。是的,看起来像f搞定了。谢谢你的帮助!