Анотації – метадані, які можуть додаватися у вихідний код програми та семантично не впливають на неї, але можуть використовуватися в процесі аналізу коду, компіляції та навіть під час виконання.
Основні варіанти використання анотацій:
• надавати потрібну інформацію для компілятора;
• надавати метадані різним інструментам для генерації коду, конфігурацій тощо;
• використовуватись у коді під час виконання програмного коду (reflection).
Створення власних анотацій
Анотації створюються з використанням механізму, який ґрунтується на інтерфейсі. Приклад оголошення анотації:
@interface My {
String str();
int val();
} Символ @ вказує компілятору, що оголошена анотація. Методи, які оголошені в анотації, поводяться як поля.
Анотування методу :
@My (str = "Приклад анотації", val = 123)
public static void myMethod() { // ...
Вбудовані анотації
@Retention – це анотація, яка призначена для застосування лише як анотації до інших анотацій. Визначає політику утримання.
@Documented – це маркер-інтерфейс, який повідомляє інструменту, що анотація має бути документована.
@Target – це анотація, що визначає тип оголошення, до якого може бути застосована анотація. Приймає один аргумент, який має бути константою з перерахунку ElementType. Наприклад, щоб вказати, що анотація застосовується лише до полів і локальних змінних:
@Target({ ElementType.FIELD, ElementTyle.LOCAL_VARIABLE})
@Inherited – це анотація-маркер, яка може застосовуватися в іншому оголошенні анотації. Вона стосується лише тих анотацій, які будуть використані в оголошеннях класів. Ця анотація дає змогу анотації суперкласу бути успадкованою в підкласі.
@Override – анотація-маркер, яка може застосовуватися лише до методів. Метод, анотований як @Override, має перевизначати метод суперкласу.
@Deprecated – анотація, яка вказує на те, що оголошення застаріло та має бути замінено на нову форму.
@SafeVarargs – анотація-маркер, яка застосовується до методів і конструкторів. Вона вказує на те, що ніякі небезпечні дії, які пов'язані з параметром змінної кількості аргументів, неприпустимі. Застосовується лише до методів і конструкторів зі змінною кількістю аргументів, які оголошені як static чи final.
@SuppressWarnings – ця анотація вказує, що одне або більше попереджень, які можуть бути видані компілятором, варто придушити.
Політика утримання анотацій
Є 3 політики утримання анотацій.
Політика утримання визначає, в якій точці анотація скидається:
• RetentionPolicy.SOURCE – анотація використовується на етапі компіляції та має відкидатися компілятором;
• RetentionPolicy.CLASS – анотація буде записана в class-файл компілятором, але не має бути доступною під час виконання (runtime). За замовчуванням у всіх анотацій .class.
• RetentionPolicy.RUNTIME – анотація буде записана в class-файл і доступна під час виконання через reflection.
Отримання анотації
Рефлексія – цей засіб дозволяє отримати інформацію про клас під час виконання програми.
Class c = ob.getClass();
Method m = c.getMethod("myMeth");
My anno = m.getAnnotation(My.class);
Використовуючи рефлексію, ми отримуємо інструкцію MyAnno, асоційовану з методом myMeth().
Q&A
Дякую всім за заняття!🙌🏻
❗️🎓Тема уроку: 6. Annotations
Нагадую, що дедлайн здачі домашніх робіт – до наступного уроку.
Якщо виникають складнощі, пишіть, допоможу із задоволенням 😌
Запис лекції тренер опублікує трохи пізніше 🖥
Не забудьте повторити матеріал та підготуватися до наступного уроку📚
Успіху і до зустрічі!🤩
OOP. 1
Назва
Кількостей
Ціна
Рік виготовлення
Виробник
Визначити найдорожчий товар на складі та надрукувати всі відомості про нього.
OOP. 2
Назва
Частота
Об'єм оперативної пам'яті
Наявність DVD ROM
Вартість
Обчислити середню вартість усіх комп'ютерів і надрукувати найменування комп'ютерів та їхню середню вартість.
OOP. 3
Прізвище
Рік народження
Посада
Зарплата
Освіта
Визначити кількість працівників - інженерів і надрукувати всі відомості про них.