2013-07-28 5 views
31

내가 이렇게 내 자신의 주석 형을 만들었습니다자바에서 클래스 주석을 얻는 방법은 무엇입니까?

public @interface NewAnnotationType {} 

및 클래스에 연결 :

@NewAnnotationType 
public class NewClass { 
    public void DoSomething() {} 
} 

와 나는이 같은 반사를 통해 클래스 주석을 얻으려고 노력 :

Class newClass = NewClass.class; 

for (Annotation annotation : newClass.getDeclaredAnnotations()) { 
    System.out.println(annotation.toString()); 
} 

하지만 아무 것도 인쇄하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+1

때문에 주석이 컴파일시에만 사용할 수 있습니다. –

답변

38

기본 보존 정책은 기본적으로 주석 정보가 런타임에 유지되지 않습니다 것을 의미 RetentionPolicy.CLASS이다

컴파일러에 의해 클래스 파일에 기록 할되지만이 보유 할 필요가 없다 주석

런타임시 VM. 이는 기본 동작입니다.

주석 컴파일러에 의해 클래스 파일에 기록되어 실행시에 VM에 의해 유지되어야한다, 그래서 그들은 반 성적 읽을 수 있습니다 :

대신 RetentionPolicy.RUNTIME를 사용합니다. 당신이 @Retention meta-annotation 사용하여 지정한

... : 명시 적으로 표시하지 않는 한

@Retention(RetentionPolicy.RUNTIME) 
public @interface NewAnnotationType { 
} 
+0

그래, 어떻게 바꿀 수 있니? 다시 작성한 후 –

+1

다시 작성한 후 :) 덕분에 –

+1

[나를 위해 작동합니다.] (http://ideone.com/AMTHsM) –

관련 문제