문제

Java 메모리 모델 (1.5 이후)이 취급됩니다 final 비에 대해 다르게 필드final 필드. 특히, 제공 this 건설 중에는 참조가 탈출되지 않습니다 final 생성자의 필드는 데이터 레이스를 통해 객체를 다른 스레드에 사용할 수있게하더라도 다른 스레드에서 보장됩니다. (비에게 쓰기final 필드는 보장되지 않기 때문에 부적절하게 게시하면 다른 스레드는 부분적으로 구성된 상태에서 볼 수 있습니다.)

스칼라 컴파일러가 어떻게 생성하는지에 대한 문서가 있습니까? final (비가 아닌final) 클래스의 후원 필드? 언어 사양을 살펴보고 웹을 검색했지만 확실한 답변을 찾을 수는 없습니다. (이에 비해 @scala.volatile 주석 ~이다 필드를 표시하도록 문서화되었습니다 volatile)

도움이 되었습니까?

해결책

나는 변화가 언제 이루어 졌는지 알아보기 위해 역사를 파헤 쳤다.

JVM으로의 스칼라를 투영하는 것은 언어 사양에 따라 다루지 않습니다.

다른 팁

그것은 a final 당신이 무언가를 선언 할 때 필드 val. 다음과 같은 참조를 수정할 수있는 모든 것 var, (분명히) 할 수 없습니다 final 아래에.

이것은 그것을 의미합니다 case classes 최종 필드도 포함합니다 (사례 클래스 생성자에 대한 인수가 암시 적으로 val에스)

나는 이것에 대한 문서 버그를 제출했다 스칼라 버그 체계.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top