찾다

 >  Q&A  >  본문

java-ee - JAVA8 람다 표현식은 외부 변수의 값을 변경합니다.


그림과 같이 etotalPrice를 외부에서 정의한 후 두 개의 for 루프에서 이 값을 변경하려고 했으나 오류가 발생했습니다. 어떻게 해결해야 하나요?
(NumberUtil.add 및 mutiplyu는 +*소수점 2자리를 유지하는 기본 방법입니다)

天蓬老师天蓬老师2747일 전969

모든 응답(3)나는 대답할 것이다

  • 仅有的幸福

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

    Java의 고전 책인 "Effective Java"와 "Java Concurrency in Practice"에서 마스터는 변수 참조 누출이라고도 하는 익명 함수의 변수 참조가 스레드 안전 문제로 이어질 수 있다고 언급했습니다. 따라서 Java8 이전에는 함수를 참조하려면 익명 클래스 내부의 지역 변수는 final, 즉 불변 객체로 선언되어야 합니다.

    Java8은 여기에 구문 설탕을 추가합니다. 람다 표현식과 익명 클래스 내에서 지역 변수가 참조되면 직접 최종 변수로 처리됩니다.

    이 코드를 리팩터링하는 것이 좋습니다. 람다를 사용하여 값을 반환하고 이를 외부 변수에 할당하세요.

    회신하다
    0
  • 欧阳克

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

    람다 표현식의 totalPrice는 최종 유형이어야 하며 초기화 후에는 최종 유형을 변경할 수 없으므로 다시 totalPrice에 값을 할당하면 오류가 발생합니다. 따라서 값을 totalPrice에 다시 복사하는 대신 변수를 다시 정의하여 새 값을 저장해야 합니다. 변수를 변경할 수 없는 경우 람다 식을 사용하지 마세요.

    회신하다
    0
  • 怪我咯

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

    Final은 물론 불변입니다. 변경해야 한다면 람다를 사용하지 마세요. 람다를 사용한다면 값을 수정하지 마세요

    회신하다
    0
  • 취소회신하다