所以我正在尝试学习使用自定义注释的基础知识,所以我创建了一个空注释:
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没有找到注释?
(如果你想知道,我最初会尝试注释方法,这就是为什么我做了CallMe
,但我认为一个类级别的例子会更容易先做。)
答案 0 :(得分:3)
您需要注释这样的注释类,以便在运行时提供注释信息:
@Retention(RetentionPolicy.RUNTIME)
public @interface CallMe {
}
答案 1 :(得分:2)
尝试:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface CallMe {
...
}