0

我正在尝试使用 oxbow_lakes 中描述的脚手架,Java中实现 Scala PartialFunction 的最简单方法是什么?调用采用 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 在相反方向提供的另一个虚构。

正在努力...

更新 2

似乎很多在 PartialFunction 中标记为具体的方法都是由编译器创建的。事实证明,这比我想象的和工作更乏味。

像往常一样,从 Java 访问 Scala 比反过来要困难得多。也许您可以在 Scala 端创建一个对 Java 友好的 API?

于 2013-02-20T14:50:20.090 回答