Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Типы аннотаций в Java: предопределенные, кастомные и мета-аннотации

Типы аннотаций в Java

Это руководство охватывает аннотации в Java — предопределенные, пользовательские и мета-аннотации — с понятными примерами.

Аннотации в Java — это метаданные, описывающие элементы в вашем исходном коде. Платформа Java SE поставляет набор стандартных аннотаций, а разработчики могут создавать пользовательские, адаптированные к своим проектам. Аннотации также могут аннотироваться самими собой, образуя так называемые мета-аннотации.

Аннотации делятся на три категории:

  1. Предопределенные аннотации — встроенные в платформу Java.
  2. Пользовательские аннотации — определенные пользователем для специфических нужд.
  3. Мета-аннотации — аннотации, применяемые к другим аннотациям.

Предопределенные типы аннотаций

1. @Deprecated

Маркер @Deprecated сигнализирует, что класс, метод, поле или другой элемент устарел и имеет более новую альтернативу. Компилятор выдает предупреждение всякий раз, когда используется устаревший элемент.

Синтаксис:

@Deprecated public void oldMethod() { ... }

Javadoc предоставляет тег @deprecated для документации:

/** * @deprecated * Use {@link #newMethod()} instead. */ @Deprecated public void oldMethod() { ... }

Пример

class Main { /** * @deprecated * This method is deprecated and has been replaced by newMethod() */ @Deprecated public static void deprecatedMethod() { System.out.println("Deprecated method"); } public static void main(String[] args) { deprecatedMethod(); } }

Вывод:

Deprecated method

2. @Override

Аннотация @Override указывает, что метод предназначен для переопределения метода из суперкласса или интерфейса. Хотя не обязательна, она отлавливает ошибки, такие как несовпадающие сигнатуры, во время компиляции.

Пример

class Animal { public void display() { System.out.println("I am an animal"); } } class Dog extends Animal { @Override public void display() { System.out.println("I am a dog"); } public void printMessage() { display(); } } class Main { public static void main(String[] args) { Dog dog1 = new Dog(); dog1.printMessage(); } }

Вывод:

I am a dog

3. @SuppressWarnings

Эта аннотация инструктирует компилятор игнорировать конкретные категории предупреждений. Распространенные категории включают deprecation и unchecked.

Использование:

@SuppressWarnings("deprecation")

Несколько категорий:

@SuppressWarnings({"deprecation", "unchecked"})

Пример

class Main { @Deprecated public static void deprecatedMethod() { System.out.println("Deprecated method"); } @SuppressWarnings("deprecation") public static void main(String[] args) { Main depObj = new Main(); depObj.deprecatedMethod(); } }

Вывод:

Deprecated method

4. @SafeVarargs

Применяется к final, static или private методам и конструкторам, @SafeVarargs утверждает, что метод не выполняет небезопасных операций на своем varargs параметре. Это устраняет unchecked предупреждения, связанные с varargs.

Пример

import java.util.*; class Main { @SafeVarargs private static void displayList(List<String>... lists) { for (List<String> list : lists) { System.out.println(list); } } public static void main(String[] args) { List<String> universityList = Arrays.asList("Tribhuvan University", "Kathmandu University"); List<String> programmingLanguages = Arrays.asList("Java", "C"); displayList(universityList, programmingLanguages); } }

Вывод:

[Tribhuvan University, Kathmandu University] [Java, C]

5. @FunctionalInterface

Введенная в Java 8, эта аннотация обозначает интерфейс как функциональный — интерфейс с единственным абстрактным методом. Компилятор проверяет это ограничение.

Пример

@FunctionalInterface public interface MyFuncInterface { void firstMethod(); // abstract }

Добавление второго абстрактного метода вызывает ошибку компиляции:

@FunctionalInterface public interface MyFuncInterface { void firstMethod(); void secondMethod(); // compile‑time error }

Несколько default или static методов разрешены.

@FunctionalInterface public interface MyFuncInterface { void firstMethod(); default void secondMethod() { /* ... */ } default void thirdMethod() { /* ... */ } }

Пользовательские аннотации

Разработчики могут создавать аннотации, подходящие для приложения-специфических требований. Синтаксис использует @interface и может включать методы-элементы с опциональными значениями по умолчанию.

Синтаксис

@interface AnnotationName { ElementType elementName() default defaultValue; }

Пример

@interface MyCustomAnnotation { String value() default "default value"; } class Main { @MyCustomAnnotation(value = "programiz") public void method1() { System.out.println("Test method 1"); } public static void main(String[] args) { new Main().method1(); } }

Вывод:

Test method 1

Мета-аннотации

Мета-аннотации конфигурируют поведение других аннотаций.

1. @Retention

Определяет область видимости аннотации: SOURCE, CLASS или RUNTIME.

@Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { }

2. @Documented

Гарантирует, что аннотация появится в сгенерированном Javadoc.

@Documented public @interface MyAnnotation { }

3. @Target

Ограничивает аннотацию конкретными программными элементами.

@Target(ElementType.METHOD) public @interface MyAnnotation { }

Типы элементов включают ANNOTATION_TYPE, CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE.

4. @Inherited

Позволяет подклассу наследовать аннотацию, присутствующую на суперклассе.

@Inherited public @interface MyAnnotation { }

5. @Repeatable

Разрешает аннотации применяться несколько раз к одному элементу. Требует контейнер-аннотацию.

@Repeatable(Universities.class) public @interface University { String name(); } public @interface Universities { University[] value(); }

Использование:

@University(name = "TU") @University(name = "KU") private String uniName;

Для доступа к данным аннотаций во время выполнения используйте Reflection API методы getAnnotationsByType() или getAnnotations().

java

  1. Примитивные типы данных в Java: полное руководство с примерами
  2. Освоение операторов Java: типы, синтаксис и практические примеры
  3. Интерфейсы в Java: концепции, реализация и лучшие практики
  4. Try-with-resources в Java: автоматическое управление ресурсами
  5. Аннотации в Java: типы, размещение и практические примеры
  6. Типы аннотаций в Java: предопределенные, кастомные и мета-аннотации
  7. Понимание String.charAt() в Java: синтаксис, возвращаемый тип, исключения и пример
  8. Освоение String.endsWith() в Java: проверка суффиксов строки с примерами
  9. Замена строк в Java: replace(), replaceAll() и replaceFirst() подробно
  10. Типы переменных в Java: локальные, экземпляра и статические