4

私はJavaのscalaライブラリ、具体的にはを返す関数を使用していますEither[A, B]。私の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でどちらかのオブジェクトを処理する適切な方法はありますか?

4

2 に答える 2

1

私はこれをテストしませんでしたが、ScalaDoc forによると、RightProjectionを呼び出すことができるはずですget()resultでない場合、これは例外をスローすることに注意してくださいRight

IDEでScalaクラスを操作するには、IDEがそれらについて知る必要があります。scala-library.jarしたがって、IDEで指定されたビルドパスに追加する必要があります。IDE(およびJavaコンパイラーとランタイム)にとって、Scalaは、Scalaで記述されたすべてのライブラリーとプログラムの依存関係である単なる通常のライブラリーです。

于 2013-02-19T20:12:57.903 に答える
0

RightProjectionおよびは、(の内部クラスではなく)内LeftProjectionで定義されたネストされたクラスです。ScalaオブジェクトのJVMクラスへのエンコーディングを追跡する必要があります。オブジェクト名に追加されたものなどがあると思います...そうすると、JVMレベルのクラスは、その名前がオブジェクトのクラス名と(別の1つだと思います)とを組み合わせたものになります。object Eitherclass Either$RightProjection$RightProjection

またはそのようなもの。私はこれほど深く掘り下げる必要はありませんでした。

ストックjavapツールは、この情報を追跡するのに役立ちます。

于 2013-02-19T20:30:59.217 に答える