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

Класс ElementType

Класс ElementType - это перечисление (enum) из пакета java.lang.annotation, которое используется в аннотации Target для указания того, к каким именно элементам языка Java может быть применена пользовательская аннотация. Каждое значение перечисления соответствует определённому виду элемента программы: классу, полю, методу, параметру и так далее. Значения ElementType передаются в качестве параметра в аннотацию Target, тем самым ограничивая область применения создаваемой аннотации.

Синтаксис

@Target(ElementType.TYPE) @Target({ElementType.METHOD, ElementType.FIELD}) @Target(ElementType.PARAMETER) @Target(ElementType.CONSTRUCTOR) @Target(ElementType.LOCAL_VARIABLE) @Target(ElementType.ANNOTATION_TYPE) @Target(ElementType.PACKAGE) @Target(ElementType.TYPE_USE) @Target(ElementType.TYPE_PARAMETER) @Target(ElementType.MODULE) @Target(ElementType.RECORD_COMPONENT)

Значения перечисления

Перечисление ElementType содержит следующие константы:

TYPE - класс, интерфейс, перечисление или запись FIELD - поле класса METHOD - метод PARAMETER - параметр метода или конструктора CONSTRUCTOR - конструктор LOCAL_VARIABLE - локальная переменная ANNOTATION_TYPE - тип аннотации PACKAGE - пакет TYPE_USE - использование типа TYPE_PARAMETER - параметр типа MODULE - модуль RECORD_COMPONENT - компонент записи

Пример

Давайте создадим аннотацию, которая может применяться только к методам и полям:

import java.lang.annotation.ElementType; import java.lang.annotation.Target; @Target({ElementType.METHOD, ElementType.FIELD}) @interface MyAnnotation { } public class Main { @MyAnnotation private int field = 5; @MyAnnotation public void doSomething() { System.out.println("Method called"); } public static void main(String[] args) { Main obj = new Main(); obj.doSomething(); System.out.println(obj.field); } }

Результат выполнения кода:

"Method called" "5"

Пример

Давайте создадим аннотацию, применимую только к классам и интерфейсам, и используем её:

import java.lang.annotation.ElementType; import java.lang.annotation.Target; @Target(ElementType.TYPE) @interface ClassOnly { } @ClassOnly class MyClass { public void show() { System.out.println("Hello from MyClass"); } } public class Main { public static void main(String[] args) { MyClass obj = new MyClass(); obj.show(); Class<?> clazz = MyClass.class; boolean present = clazz.isAnnotationPresent(ClassOnly.class); System.out.println("Annotation present: " + present); } }

Результат выполнения кода:

"Hello from MyClass" "Annotation present: true"

Пример

Давайте посмотрим, какие значения ElementType содержит перечисление:

import java.lang.annotation.ElementType; public class Main { public static void main(String[] args) { ElementType[] types = ElementType.values(); for (ElementType type : types) { System.out.println(type); } } }

Результат выполнения кода:

TYPE FIELD METHOD PARAMETER CONSTRUCTOR LOCAL_VARIABLE ANNOTATION_TYPE PACKAGE TYPE_USE TYPE_PARAMETER MODULE RECORD_COMPONENT

Смотрите также

  • аннотация Target,
    которая использует ElementType для указания области применения
  • перечисление RetentionPolicy,
    которое определяет политику хранения аннотаций
  • аннотация Retention,
    которая задаёт время жизни аннотации
  • аннотация Annotation,
    которая является базовым интерфейсом всех аннотаций
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить