久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術(shù)文章
文章詳情頁

java-ee - JAVA8 lambdas表達(dá)式 改變外面變量的值

瀏覽:147日期:2023-11-08 17:03:37

問題描述

java-ee - JAVA8 lambdas表達(dá)式 改變外面變量的值如圖,我在外部定義了一個(gè)etotalPrice,然后再兩個(gè)for循環(huán)里想要改變這個(gè)值,結(jié)果給我報(bào)錯(cuò)了,該怎么解決?(NumberUtil.add和mutiplyu是基礎(chǔ)的+*保留2位小數(shù)的方法)

問題解答

回答1:

在Java的經(jīng)典著作《Effective Java》、《Java Concurrency in Practice》里,大神們都提到:匿名函數(shù)里的變量引用,也叫做變量引用泄露,會(huì)導(dǎo)致線程安全問題,因此在Java8之前,如果在匿名類內(nèi)部引用函數(shù)局部變量,必須將其聲明為final,即不可變對(duì)象。

Java8這里加了一個(gè)語法糖:在lambda表達(dá)式以及匿名類內(nèi)部,如果引用某局部變量,則直接將其視為final。

建議你重構(gòu)一下這段代碼:使用lambda返回一個(gè)值,賦給外面的變量。

回答2:

意思是totalPrice在lambada表達(dá)式中,應(yīng)該是final類型,final類型初始化后就不可以改變了,所以再次給totalPrice賦值會(huì)錯(cuò)誤。所以應(yīng)該重新定義一個(gè)變量保存新的值,而不是再次將值復(fù)制給totalPrice,如果改變變量不可以,就不要使用lambada表達(dá)式。

回答3:

final 的,當(dāng)然不可變啦。如果必須要變就不要用lambda,用lambda就別修改值

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 南城县| 明光市| 武安市| 长乐市| 孟连| 静安区| 资中县| 伊吾县| 天津市| 苗栗县| 务川| 武山县| 阿坝县| 灵川县| 庆安县| 临城县| 中宁县| 抚松县| 福泉市| 沙洋县| 镶黄旗| 荔波县| 庆城县| 长宁区| 诸城市| 民乐县| 中西区| 乐业县| 墨江| 安徽省| 舞钢市| 惠州市| 台中县| 于田县| 泾阳县| 弥勒县| 阿克陶县| 遵化市| 新乐市| 石嘴山市| 安宁市|