2012-05-23 2 views
6

를 통해 자바 클래스가 아닌 최종 만들기 나는 하나 다음과 같은 자바 클래스가 그러나 이것도 수업에도 가능합니까? 런타임에 최종 클래스를 최종 클래스가 아닌 클래스로 변환 할 수 있습니까?반사 API

답변

4

ASM과 같은 라이브러리를 사용하여 클래스 파일을 다시 쓸 수 있습니다.

런타임시 서브 클래스를 컴파일 할 때 컴파일 타임에 비 최종적 일 필요가 있으므로 final 클래스의 상태를 변경할 필요가 없습니다.

+3

유스 케이스 user982247을 염두에두고 있지만 객체를 프록시하려고하면 컴파일 타임에 문제가 발생하지 않고 런타임에 클래스를 최종이 아닌 것으로 변경하려고 할 수있는 한 가지 이유가 있습니다. –

1

컴파일러가 컴파일 타임에 비 최종적으로하려고하는 클래스인지 확인하기 때문에 어떻게 작동하는지 알 수 없습니다. 당신이 그것을 상속하려고하면 오류가 발생합니다.

내가 궁금한 점이 있다면 물어 보는 것이 좋겠지 만 자신에게 물어 보는 더 큰 질문은 왜 이것을하고 싶습니까? 리플렉션을 사용하면 최종 목표, 비공개 목표 등 다양한 목표를 달성 할 수 있지만 좋은 아이디어는 아닙니다. 제 3 자 라이브러리의 설계자가 최종 결론이 좋은 아이디어라고 생각한다면,이를 존중하는 것이 좋습니다.