2014-09-23 15 views
2

Так что я пытаюсь научиться основам использования пользовательских аннотаций, так что я создал пустой аннотацию:Почему java не видит мою аннотацию?

public @interface CallMe { 

} 

и Test класс:

import java.lang.annotation.*; 

@CallMe 
public class Test { 
    public static void main(String[] args) throws Exception { 
     Annotation[] annotations = Test.class.getAnnotations(); 

     if (Test.class.isAnnotationPresent(CallMe.class)) { 
      System.out.println("CallMe is present."); 
     } 

     System.out.println("Found " + annotations.length + " annotations."); 

     for (Annotation a: annotations) { 
      System.out.println("Annotation: " + a); 
     } 
    } 
} 

Я компилировать обоих классов и выполнить Test , но:

$ javac Test.java CallMe.java 
$ java Test 
Found 0 annotations. 

Я использую OpenJDK 1.6 для этого теста, если это имеет значение. Я оцениваю как .getAnnotations(), так и .getDeclaredAnnotations(), но результатов не найдено.

Почему Java не находит аннотацию?

(И в случае, если вам было интересно, я изначально собирался попытаться аннотировать методы, поэтому я сделал это , но я решил, что пример уровня класса будет проще сделать первым).

ответ

3

Вы должны аннотировать класс аннотаций, как это сделать свою информацию аннотаций доступна во время выполнения:

@Retention(RetentionPolicy.RUNTIME) 
public @interface CallMe { 

} 
2

Try:

@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.TYPE}) 
public @interface CallMe { 
... 
} 
+0

+1 Спасибо, Target было также полезно узнать о , – FatalError