Аннотация Target
Аннотация Target определяет, к каким элементам программы
может быть применена пользовательская аннотация. Она принимает
один обязательный параметр - массив значений перечисления
ElementType. Если аннотация не помечена Target,
она может использоваться где угодно. Если указан хотя бы один
элемент, аннотация будет доступна только для перечисленных
типов элементов. В параметр передаются константы, например
ElementType.METHOD или ElementType.FIELD.
Синтаксис
@Target(ElementType.TYPE)
@Target({ElementType.METHOD, ElementType.FIELD})
@Target(ElementType.PARAMETER)
Пример
Создадим аннотацию, которая может применяться только к методам:
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@interface MyMethodAnnotation
{
}
public class Main
{
@MyMethodAnnotation
public static void doWork()
{
System.out.println("Method called");
}
public static void main(String[] args)
{
doWork();
}
}
Результат выполнения кода:
"Method called"
Пример
Создадим аннотацию, которая может применяться к полям и методам:
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target({ElementType.FIELD, ElementType.METHOD})
@interface MyFieldAndMethodAnnotation
{
}
public class Main
{
@MyFieldAndMethodAnnotation
private static String name = "abcde";
@MyFieldAndMethodAnnotation
public static void show()
{
System.out.println(name);
}
public static void main(String[] args)
{
show();
}
}
Результат выполнения кода:
"abcde"
Пример
Если применить аннотацию к неподходящему элементу, компилятор выдаст ошибку. Например, аннотация ниже разрешена только для методов, но использована для поля:
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@interface OnlyMethod
{
}
public class Main
{
@OnlyMethod
private static String name = "abcde";
public static void main(String[] args)
{
System.out.println(name);
}
}
Компиляция завершится ошибкой:
error: annotation type not applicable to this kind of declaration
Смотрите также
-
аннотация
Annotation,
которая является базовой для всех аннотаций -
аннотация
Retention,
которая определяет область хранения аннотации -
перечисление
ElementType,
которое содержит типы элементов для Target -
аннотация
Inherited,
которая разрешает наследование аннотаций