0

Java コードからfoldLeftscala でメソッドを呼び出したい:Buffer

    List<Integer> javaList = new ArrayList<>();
    javaList.add(1);
    javaList.add(3);
    javaList.add(5);

    Buffer<Integer> scalaBuffer = JavaConversions.asScalaBuffer(javaList);

    scalaBuffer.foldLeft(0, new Function2<Integer, Integer, Integer>() {
        @Override
        public Integer apply(Integer accumulator, Integer element) {
            return carry + element;
        }
    });

しかし、次のコンパイラ エラーが発生します。

Multiple markers at this line
- The type new Function2<Integer,Integer,Integer>(){} must implement the 
 inherited abstract method Function2<Integer,Integer,Integer>.apply$mcVDI
 $sp(double, int)
- The type new Function2<Integer,Integer,Integer>(){} must implement the 
 inherited abstract method Function2<Integer,Integer,Integer>.tupled$mcIDD$sp()
- The type new Function2<Integer,Integer,Integer>(){} must implement the 
 inherited abstract method Function2<Integer,Integer,Integer>.tupled$mcVJJ$sp()
- The type new Function2<Integer,Integer,Integer>(){} must implement the 
 inherited abstract method Function2<Integer,Integer,Integer>.apply$mcZDJ
 $sp(double, long)
    .
    .
    .

基本的に、興味のないメソッドを大量に実装する必要があります。

JavaからモナドでfoldLeftメソッドを呼び出す簡単な解決策はありますか?

ありがとう、ジョン

(Scala 2.10-M5 および JDK 1.7 を使用)

4

2 に答える 2

1

この scala-lang スレッドによると、適切な行動方針はおそらくscala.runtime.AbstractFunction2直接実装するのではなく、拡張することFunction2です。

そのスレッドはスカラ時間では少し古いですが、解決策を示している可能性があります。私は自分で試したことがないことを告白します。

于 2012-07-25T22:20:36.957 に答える
1

AbstractFunction2を実装するのではなく、拡張してみることができますFunction2

Java コンパイラの場合、scala トレイトは単なるインターフェイスであり、トレイトで抽象化されていないメソッドの実装を自動的に取得する方法はありません。インターフェースだけ見ると、メソッドはすべてJavaのように抽象的です。

于 2012-07-25T22:20:37.767 に答える