使用scala.Java中的
我使用的是java中的scala库,特别是一个返回使用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(新函数(){
或[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
的类
或者类似的,我从来没有挖过这么深
stockjavap
工具可以帮助您跟踪这些信息。问题是我甚至无法从Java导入RightProjection。因此,result.right().get()也可以无法编译。我猜RightProjection嵌套在源文件中的任意一个伴生对象中,因此它从Java透视图中隐藏了?您的IDE应该能够向您显示right()的返回类型
,使用它进行导入。我猜它是scala.util。或者$RightProjection
或者scala.util。或者$RightProjection$
。您的IDE中包含scala JAR文件了吗?如果没有,那么它应该可以工作。您需要scala library.JAR
,它包含相关类的字节码。是的,看起来像f搞定了。谢谢你的帮助!