java-ee - L'expression lambdas JAVA8 modifie la valeur des variables externes
天蓬老师
天蓬老师 2017-06-12 09:24:10
0
3
900


Comme le montre l'image, j'ai défini un etotalPrice en externe, puis j'ai essayé de changer cette valeur en deux boucles for, mais une erreur m'a été signalée. Comment la résoudre ?
(NumberUtil.add et mutiplyu sont les +* méthodes de base pour conserver 2 décimales)

天蓬老师
天蓬老师

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

répondre à tous(3)
仅有的幸福

Dans les livres classiques de Java "Effective Java" et "Java Concurrency in Practice", les maîtres ont mentionné que les références de variables dans les fonctions anonymes, également appelées fuites de références de variables, peuvent entraîner des problèmes de sécurité des threads. Par conséquent, avant Java8, si vous faites référence à une fonction. variable locale à l'intérieur d'une classe anonyme, elle doit être déclarée finale, c'est-à-dire un objet immuable.

Java8 ajoute ici un sucre de syntaxe : au sein des expressions lambda et des classes anonymes, si une variable locale est référencée, elle sera traitée directement comme finale.

Je vous suggère de refactoriser ce code : utilisez lambda pour renvoyer une valeur et l'attribuer à une variable externe.

学霸

Cela signifie que totalPrice dans l'expression lambda doit être de type final. Le type final ne peut pas être modifié après son initialisation, ce sera donc une erreur d'attribuer à nouveau une valeur à totalPrice. Vous devez donc redéfinir une variable pour enregistrer la nouvelle valeur au lieu de copier à nouveau la valeur dans totalPrice. Si la modification de la variable n'est pas possible, n'utilisez pas d'expressions lambda.

刘奇

Final, bien sûr, immuable. Si vous devez changer, n'utilisez pas lambda. Si vous utilisez lambda, ne modifiez pas la valeur

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!