Аннотация Inherited
Аннотация Inherited - это мета-аннотация,
которая применяется к другим аннотациям и указывает,
что если класс помечен такой аннотацией,
то его подклассы автоматически наследуют эту аннотацию.
Сама по себе Inherited не принимает параметров.
Она работает только с аннотациями, у которых политика
удержания - RUNTIME, поскольку наследование
проверяется через рефлексию во время выполнения.
Если аннотация помечена Inherited, то при вызове
метода getAnnotation у подкласса будет возвращена
аннотация, унаследованная от суперкласса.
Синтаксис
@Inherited
@interface AnnotationName
{
// элементы аннотации
}
Пример
Давайте создадим аннотацию, помеченную Inherited,
и проверим, наследуется ли она подклассом:
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation
{
}
@MyAnnotation
class Parent
{
}
class Child extends Parent
{
}
public class Main
{
public static void main(String[] args)
{
System.out.println(Child.class.isAnnotationPresent(MyAnnotation.class));
}
}
Результат выполнения кода:
true
Пример
Давайте убедимся, что без Inherited аннотация
не наследуется подклассом:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation
{
}
@MyAnnotation
class Parent
{
}
class Child extends Parent
{
}
public class Main
{
public static void main(String[] args)
{
System.out.println(Child.class.isAnnotationPresent(MyAnnotation.class));
}
}
Результат выполнения кода:
false
Смотрите также
-
аннотация
Annotation,
которая является базовым интерфейсом всех аннотаций -
аннотация
Retention,
которая задаёт политику удержания аннотации -
аннотация
Target,
которая определяет, к чему применима аннотация -
аннотация
Documented,
которая включает аннотацию в документацию