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)
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
.