2013-06-12 2 views
14

자바에서 합성 필드의 중요성을 이해하기 쉬운 방식으로 설명 할 수 있습니까? 나는 각각의 내부 클래스 인스턴스가 그 둘러싸는 클래스에 대한 참조를 유지하는 비 정적 내부 클래스의 문맥에서 그것을 읽었다. 그러한 참조/필드가 합성 필드라고하는 이유는 무엇입니까?Java의 합성 필드 란 무엇입니까?

+0

http://stackoverflow.com/questions/5223268/what-is-the-meaning-of-static-synthetic 및 http://stackoverflow.com/questions/7767804/synthetic-back-reference-to-an-inner-class – assylias

답변

15

합성 필드는 로컬 내부 클래스를 블록의 로컬 변수 또는 참조 유형 매개 변수에 연결하는 컴파일러 생성 필드입니다. 컴파일러는 이름의 범위 지정을 구현하기 위해 특정 숨겨진 필드와 메서드를 합성합니다. 이 필드는 달리 명시하지 않는 한 비공개 필드이거나 대부분 패키지 범위에 속합니다. 당신은 자세한 내용은 here를 얻고 소스 코드에 표시되지 않는 클래스 멤버가 합성 속성을 사용하여 표시해야합니다 JLS

에, 그렇지 않으면 그 ACC_SYNTHETIC 플래그가 설정되어 있어야합니다 수 있습니다. 이 요구 사항에 대한 유일한 예외는 구현 아티팩트로 간주되지 않는 컴파일러 생성 메소드, 즉 Java 프로그래밍 언어의 기본 생성자 (§2.9)를 나타내는 인스턴스 초기화 메소드, 클래스 초기화 메소드 (§2.9) 및 열거 형입니다. values ​​() 및 Enum.valueOf() 메서드 ..

+0

"합성 필드는 로컬 내부 클래스를 블록의 로컬 변수 또는 참조 유형 매개 변수에 연결하는 컴파일러 생성 필드입니다 "... 나는이 선의 의미를 이해하지 못한다. 코드 예제가 도움이 될 것입니다. – Geek

+1

코드 예제는이 [blog] (http://javapapers.com/core-java/java-synthetic-class-method-field/)에서 확인할 수 있습니다. – NINCOMPOOP

+0

그래서 필드를 통한 리플렉션을 통해 복제를 만들면 바로 건너 뛰어야합니다. –

관련 문제