ホームページ  >  に質問  >  本文

java-ee - JAVA8 ラムダ式は外部変数の値を変更します


図に示すように、etotalPrice を外部で定義し、この値を 2 つの for ループで変更しようとしましたが、エラーが報告されました。それ?
(NumberUtil.add と mutiplyu は、小数点以下 2 桁を保持する基本的なメソッドです)

天蓬老师天蓬老师2707日前940

全員に返信(3)返信します

  • 仅有的幸福

    仅有的幸福2017-06-12 09:26:10

    Java の古典的な書籍「Effective Java」と「Java Concurrency in Practice」では、変数参照リークとも呼ばれる匿名関数での変数参照がスレッドの安全性の問題を引き起こす可能性があるとマスターが述べています。匿名クラス内のローカル変数の場合は、final、つまり不変オブジェクトとして宣言する必要があります。

    Java8 はここに構文シュガーを追加します。ラムダ式と匿名クラス内で、ローカル変数が参照される場合、それは直接 Final として扱われます。

    このコードをリファクタリングすることをお勧めします。ラムダを使用して値を返し、それを外部変数に割り当てます。

    返事
    0
  • 欧阳克

    欧阳克2017-06-12 09:26:10

    これは、ラムダ式の totalPrice が Final 型である必要があることを意味します。final 型は初期化後に変更できないため、totalPrice に値を再度代入するとエラーになります。したがって、値を totalPrice に再度コピーするのではなく、変数を再定義して新しい値を保存する必要があります。変数を変更できない場合は、ラムダ式を使用しないでください。

    返事
    0
  • 怪我咯

    怪我咯2017-06-12 09:26:10

    最終的には、もちろん不変です。変更する必要がある場合は、ラムダを使用しないでください。ラムダを使用する場合は、値を変更しないでください。

    返事
    0
  • キャンセル返事