赫伯特·希尔德(Herbert Schildt)在他有关Java的书中提到,
我很清楚注解不是继承的。注释是异常(exception),其声明使用@Inherited
进行注释。
我已经了解了其余的批注,其中包括java.lang.annotation:@Retention
,@Documented
和@Target
。其他三个-@Override
,@Deprecated
和@SuppressWarnings
。
对于@Inherited
注释,我有点困惑。有人可以用一个简单的foobar示例演示它吗?
其次,在StackOverflow上解决与此相关的一个问题时,我遇到了这个问题,
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) @Inherited
public @interface Baz {
String value(); }
public interface Foo{
@Baz("baz") void doStuff();
}
public interface Bar{
@Baz("phleem") void doStuff();
}
public class Flipp{
@Baz("flopp") public void doStuff(){}
}
将@Inherited
批注放在批注@interface Baz
上有什么用?请不要在使用Spring框架的注释中说明我,我对此不太熟悉。
最佳答案
首先,如您所引用的报价所述,
因此,由于要注释方法,因此您的示例不适用。
这是一个。
public class Test {
public static void main(String[] args) throws Exception {
System.out.println(Bar.class.isAnnotationPresent(InheritedAnnotation.class));
}
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
//@Inherited
@interface InheritedAnnotation {
}
@InheritedAnnotation
class Foo {
}
class Bar extends Foo {
}
这将打印
false
,因为CustomAnnotation
没有用@Inherited
注释。如果取消注释@Inherited
的使用,它将打印true
。