java-ee - JAVA8 ラムダ式は外部変数の値を変更します
天蓬老师
天蓬老师 2017-06-12 09:24:10
0
3
975


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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信(3)
仅有的幸福

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

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

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

いいねを押す +0
学霸

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

いいねを押す +0
刘奇

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート