Maison  >  Questions et réponses  >  le corps du texte

java-ee - L'expression lambdas JAVA8 modifie la valeur des variables externes


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)

天蓬老师天蓬老师2656 Il y a quelques jours902

répondre à tous(3)je répondrai

  • 仅有的幸福

    仅有的幸福2017-06-12 09:26:10

    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.

    répondre
    0
  • 欧阳克

    欧阳克2017-06-12 09:26:10

    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.

    répondre
    0
  • 怪我咯

    怪我咯2017-06-12 09:26:10

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

    .

    répondre
    0
  • Annulerrépondre