每个注释类型都隐式继承java.lang.annotation.Annotation接口。
package java.lang.annotation;
public interface Annotation{
boolean equals(Object obj);
int hashCode();
String toString();
Class<? extends Annotation> annotationType();
}
但是注释不会继承Annotation接口中的任何元素,它是所有注释类型的隐式祖先。因此,如果我在下面执行,将导致编译时错误
@CustomAnnotation(toString="toStringValue")
有人可以解释我,然后
Annotation接口的目的是什么?以及究竟是什么 是用吗?
答案 0 :(得分:3)
Annotation
是一个界面。这些方法是您的标准接口abstract
方法声明。
你在
的例子中指的是什么@CustomAnnotation(toString="toStringValue")
(使用toString
)是annotation type element。这是两件不同的事情。后者是注释类型的特殊语法。 Annotation
不是注释类型,它是一种接口类型。
Annotation
类型提供的是注释类型的常见超类型。所以你可以做到
Annotation custom = SomeClass.class.getAnnotation(CustomAnnotation.class);
custom.annotationType();
这些方法(equals
,toString
和hashCode
)只是在Annotation
界面中重新定义,以指定其行为。它们并不是严格要求的,因为如果Java语言没有声明它们,则隐式adds all those methods to all interface types。