2009-10-31 2 views
4

다른 클래스 (SomeClass) 안에 익명의 내부 클래스가 있습니다.Java reflection : 익명 내부 클래스를 검색하려면 어떻게해야합니까?

SomeClass.class.getClasses()SomeClass.class.getDeclaredClasses()은 빈 배열을 반환합니다.

Class에서 'Javadocs'에 대한 몇 가지 힌트를 찾을 수 없습니다.

익명의 내부 클래스는 리플렉션을 통해 어떤 방식으로 검색 될 수 있습니까?

익명 내부 클래스와 일반 내부 클래스의 주목할만한 차이점은 무엇입니까?

+0

관련 항목 : https://stackoverflow.com/q/44475201/314291 – StuartLC

답변

0

리플렉션을 사용하는 경우 실제로는 매우 나쁜 생각입니다. 이를 제외하고 런타임에서 추가 내부 클래스를 작성할 수 있다고 생각하므로 아직 생각하지 않았던 클래스를 나열하는 것은 의미가 없습니다. 현재로드 된 클래스를 나열하면 자바 에이전트 또는 유사 항목을 사용해야합니다.

익명 내부 클래스는 복사 된 외부 로컬 변수를 복사하기위한 이름, 둘러싼 메서드 및 추가 합성 필드를 구성했습니다. 한 클래스는 런타임에 다른 클래스와 거의 같습니다. 1.1에는 내부 클래스가 도입되었지만 클래스 파일은 1.0 이후 거의 변경되지 않았습니다.

+0

해결책은 없지만 좋은 주장입니다. 올바른 것으로 표시됩니다. –

4

더 이상 찾을 수 없을 때까지 클래스 $ 1 ... 클래스 $ n의 무차별 검색을 시도 할 수 있습니다.

+0

anon 내부 클래스가 주어지면 그 내부 메소드를 찾을 수 있지만 getDeclaredInnerClasses()는 Method API의 일부가 아니라는 생각이들 것입니다. – alphazero

+0

왜 나는'getDeclaredInnerClasses()'가 없는지 이해할 수 있다고 생각합니다. 클래스 파일 형식을 변경하지 않고 구현하는 것은 불가능합니다. –

+0

클래스는 이러한 정보가 전달 될 수있는 메타 정보를 지원합니다. 나는 좋은 유스 케이스가 발견되지 않았기 때문에 거기에 있다고 생각하지 않는다. 아마도 당신이하려는 일은 다른 방법으로 할 수 있습니다. 예 : 열거 형의 ?? –