2013-12-13 6 views
0
나는 다음과 같은 자바 클래스를 생성 한

을 사용하여 클래스에 정의 된 주석을 보호. 더 구체적으로, 나는 추가의 유형이 무엇인지, 물론 그 안에 이름과 그 필드와 같은 정보를 찾고있다.독서 반사

답변

2

당신은 사용할 수 있습니다

이 클래스 객체가 나타내는 클래스의 멤버로서 선언 된 모든 클래스 및 인터페이스를 반영하는 Class 오브젝트의 배열을 돌려줍니다 Class#getDeclaredClasses().

그런 다음 배열을 반복하여 해당 클래스가 Class#isAnnotation() 인 주석인지 확인할 수 있습니다.

public class Driver { 
    public static void main(String[] args) throws Exception { 
     Class<?>[] classes = Driver.class.getDeclaredClasses(); 
     System.out.println(Arrays.toString(classes)); 
     for (Class<?> clazz : classes) { 
      if (clazz.isAnnotation()) { 
       Method[] methods = clazz.getDeclaredMethods(); 
       for (Method method : methods) { 
        System.out.println(method); 
       } 
      } 
     } 
    } 

    @Retention(value=RetentionPolicy.RUNTIME) 
    @Target(value=ElementType.FIELD) 
    protected @interface Addition 
    { 
     String location(); 
    } 
} 

인쇄

[interface com.spring.Driver$Addition] 
public abstract java.lang.String com.spring.Driver$Addition.location()