【发布时间】:2017-09-07 03:31:37
【问题描述】:
我有一个SubClass 和一个SuperClass,还有一个注解DocAnnotation。我需要调用SubClass.foo() 从SubClass 和SuperClass 获取所有类注释。这些类是这样定义的:
超类
package Code
import Annotations.DocAnnotation;
import java.util.Arrays;
@DocAnnotation("Super Annotation")
public class SuperClass {
public void foo() {
System.out.println(Arrays.toString(this.getClass().getAnnotations()));
System.out.println(Arrays.toString(this.getClass().getDeclaredAnnotations()));
}
}
子类
package Code;
import Annotations.DocAnnotation;
@DocAnnotation("Sub Annotation")
public class SubClass extends SuperClass{
}
文档注释
package Annotations;
import java.lang.annotation.Inherited;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(DocAnnotations.class)
public @interface DocAnnotation {
String value();
}
Running SubClass.foo 我希望看到"Super Annotation" 和"Sub Annotation",但我只看到[@Annotations.DocAnnotation(value=Sub Annotation)]。我误解了@inherited 的作用,还是我做错了什么?
编辑:
在将注释@DocAnnotation("Super Annotation") 添加到SubClass(与SuperClass 中的注释相同)之后,它实际上出现了两次,一次用于SubClass,一次用于SuperClass!现在我几乎可以肯定我误解了一些东西......
【问题讨论】:
标签: java inheritance annotations