Seperti yang ditunjukkan dalam gambar, saya mentakrifkan etotalPrice secara luaran, dan kemudian cuba menukar nilai ini dalam dua untuk gelung, tetapi ralat telah dilaporkan kepada saya. Bagaimana untuk menyelesaikannya?
(NumberUtil.add dan mutiplyu ialah +*kaedah asas untuk mengekalkan 2 tempat perpuluhan)
Dalam buku klasik Java "Effective Java" dan "Java Concurrency in Practice", pakar menyebut bahawa rujukan pembolehubah dalam fungsi tanpa nama, juga dipanggil kebocoran rujukan berubah, boleh membawa kepada masalah keselamatan benang Oleh itu, sebelum Java8, jika Untuk merujuk fungsi pembolehubah tempatan di dalam kelas tanpa nama, ia mesti diisytiharkan muktamad, iaitu, objek tidak boleh diubah.
Java8 menambahkan gula sintaks di sini: dalam ungkapan lambda dan kelas tanpa nama, jika pembolehubah tempatan dirujuk, ia akan dianggap secara langsung sebagai muktamad.
Saya cadangkan anda memfaktorkan semula kod ini: gunakan lambda untuk mengembalikan nilai dan menetapkannya kepada pembolehubah luaran.
Ini bermakna jumlahHarga dalam ungkapan lambda hendaklah daripada jenis akhir Jenis akhir tidak boleh ditukar selepas ia dimulakan, jadi ia akan menjadi ralat untuk menetapkan nilai kepada totalPrice sekali lagi. Oleh itu, anda harus mentakrifkan semula pembolehubah untuk menyimpan nilai baharu dan bukannya menyalin nilai itu ke totalPrice sekali lagi Jika menukar pembolehubah tidak boleh dilakukan, jangan gunakan ungkapan lambda.
Akhir, sudah tentu, tidak berubah. Jika anda mesti menukar, jangan gunakan lambda Jika anda menggunakan lambda, jangan ubah suai nilai