РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
114 of 1163 menu

Аннотация 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,
    которая разрешает наследование аннотаций
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить