【자바】 关于 클로징 解决 범위에 정의되지 않은 최종 로컬 변수의리스트를 참조 할 수 없습니다 方法

오늘,이 연구는 문제가 발생했습니다 :

클로징 범위에 정의 된 final이 아닌 지역 변수 목록을 참조 할 수 없습니다

 

 

 

 

 

여기서 새로운의 Runnable는 () {...} 컴파일 오류리스트의 로컬 변수 테스트 () 메소드에 액세스 부분 익명 내부 클래스이며

해결 방법 :

최종 수정 목록으로

 

 

이유 :

프로그램 실행 테스트 () 메소드는, 상기 방법은 가변 목록 호출 스택 로컬 변수를 생성 할 때,이 부분 내부 클래스 객체가 그것을 로컬 변수 목록을 액세스하여 생성 할 때 실행 종료 후 시험 방법 (), 로컬 변수 목록이 존재하지 않는, 죽었지 만했다 : 로컬 내부 클래스 객체는 (더는 더 이상 객체를 참조하는 경우에만, 그것은 죽음 없을 것), 그것은 실행 죽음의 방법 테스트 () 끝으로 종료되지 않습니다 지속 할 수있다. 로컬 내부 클래스 객체와 로컬 변수리스트주기 일관성 로컬 내부 클래스 객체의 사후 로컬 변수 목록이 존재하지 않는 변수를 액세스 할 수있다.

 

최종 수정을 사용하면 로컬 변수 목록을 수정 한 후 자신의 데이터 멤버로 "복사", 로컬 내부 클래스 객체의 죽음 이후 지역 변수 목록의 로컬 내부 클래스 개체 목록은 여전히 ​​목록에 액세스 할 수 있습니다 "사본을."

 

 

 

 참고 : Java8 또한 최종 편집을 쓸 수 없습니다 (암시 적으로 최종 추가)

(나는 Java7했다)

추천

출처www.cnblogs.com/shuaiBqi/p/11907843.html