0

Java で Scala PartialFunction を実装する最も簡単な方法は何ですか? でoxbow_lakesによって説明されているスキャフォールディングを使用しようとしています。PartialFunction を取る Scala メソッドを呼び出す。これが私のScalaコードです:

class MyScalaClass {
   def instanceOfSomeType: SomeType = ...

   def consume(processor: PartialFunction[SomeType, Unit]) {
      processor.lift(instanceOfSomeType)
   }
}

そして、これが私がJavaからそれを呼び出そうとしている方法です:

  MyScalaClass myScalaClass = new MyScalaClass();

  PartialTransformer<SomeType, Unit> fn = new PartialTransformer<SomeType, Unit>() {
     @Override public boolean isDefinedAt(SomeType input) { return true; }
     @Override protected Unit transform0(SomeType input) { return null; }
  };

  PartialFunction<SomeType, Unit> partial = PartialFunctionBridge$.MODULE$.fromPartialTransformer(fn);

  myScalaClass.consume(partial);

コンパイラは私に教えてくれます:

consumeInt(scala.PartialFunction<SomeType,java.lang.Object>) in MyScalaClass cannot be applied
to        (scala.PartialFunction<SomeType,scala.Unit>)
4

1 に答える 1

0

voidJava で戻り値の型として使用しUnit、Scala で対応します。scala.Unitジェネリックの実際の型パラメーターに使用します。

アップデート

私は間違っていた。Java 側で void を使用して、Scala 側の Unit に対応させることはできません。これは、Scala が逆方向に提供するもう 1 つのフィクションです。

取り組んでいます...

更新 2

PartialFunction で具体的にマークされた多くのメソッドがコンパイラによって作成されているようです。これは、私が思っていたよりもはるかに退屈であり、仕事が手招きしていることを証明しています.

いつものように、Java から Scala にアクセスするのは、その逆よりもはるかに困難です。おそらく、Scala 側で Java に適した API を作成できますか?

于 2013-02-20T14:50:20.090 に答える