java.lang.IllegalAccessError: tried to access field ConcreteEntity.instance from class Entityjava.lang.IllegalAccessError : 클래스 Entity에서 ConcreteEntity.instance 필드에 액세스하려고 시도했습니다.
Ok 그래서 여기에 거래가 있습니다. 기본 ClassLoader
내부에있는 액세스 유형 기본값이있는 필드 인 ConcreteEntity.instance
에 액세스하려하고 Entity.getInstance
은 자식 ClassLoader
에 존재하는 방법입니다.
이제는 둘 다 같은 패키지에 있지만, IllegalAccessError
이 던져지고 있다는 것을 명심하십시오. 이 문제에 대한 해결책은 실제로 ClassLoader
인 ConcreteEntity
안에 Entity 클래스를로드하는 것과 관련이 없습니까?
0 new #14 <Entity>
3 dup
4 aload_0
5 invokevirtual #18 <Adapter.getInstance>
8 checkcast #20 <sl>
11 getfield #24 <sl.d>
14 invokespecial #25 <Entity.<init>>
17 areturn
예외는 "컴파일 된 후"생성 된 jclasslib at를 통해 검색된 바이트 코드입니다.
게시물을 정리 해줘서 고맙습니다.
당신이 바이트 코드 컴파일러의 어떤 종류를 사용하여 런타임에 클래스를 수정하는 :
그리고 섹션 5.4.4에서
? –예. 그러나 조작 된 바이트 코드는 완벽합니다. – Justin
수퍼 클래스 내부의 서브 클래스 필드에 액세스하려고합니까? 나는 그것이 허용되지 않는 것이라고 생각한다. –