ローカル変数とそれに対応できないようなラムダファンクションについて、奇妙な問題が発生しました。私は「外側のスコープで定義されたローカル変数ACCが最終的または効果的に最終でなければなりません」というエラー・メッセージが出続けるJavaでのローカル変数+ラムダ関数のエラー
私のコードは次のようになります。
Accumulator acc = new Accumulator(0, 0);
stream.reduce(0, (sum, value) -> {
acc = new Accumulator(sum + value, acc.getB()+1);
return sum + value;
});
をだから、あなたが見ることができるように、私は整数の流れを減らそうとしていて、還元プロセスからのものだけではなく2つの値を保持しています。小さなヘルパークラスAccumulator
にこれらの値を保存しようとしていますが、これにはfinal int a
とfinal int b
が格納されています。しかし、には届かないstream.reduce
のようです。
他のラムダ関数を含む他の部分では、同様のコード構造がうまく動作します(ローカル変数を宣言し、ラムダ関数内でそれらを変更する)ので、何をすべきか分かりません。
例(stream
はもちろん、初期化されます):
ArrayList<StudentRecord> studentList = new ArrayList<StudentRecord>();
stream.forEach(student -> {
studentList.add(student);
});
ヘルプをいただければ幸いです、 よろしく
エラーメッセージは、何が間違っているかを正確に伝えています: 'acc'は' final'と宣言されていません。質問はなんですか? –
[検索前に検索してください](/検索?q =%5Bjava%5D +ローカル+変数+定義+ in + an +囲み+スコープ+ must + be + final +または+ effective + final) ](/ help/searching)をクリックします。 –
他のコードも投稿すれば、その違いを教えていただけます。そうでなければ私たちがここで行うことはありません。 – HopefullyHelpful