Анотації на Java


114

Яка мета анотацій на Java? У мене є ця нечітка ідея про них як десь між коментарем і фактичним кодом. Чи впливають вони на програму під час виконання?

Які їх типові звички?

Вони унікальні для Java? Чи є еквівалент С ++?


9
Ви можете зробити справді злі речі з анотаціями. Наприклад, якщо ви знаєте Spring Framework та їх анотацію @Transactional, яка починає транзакцію перед викликом методу та відкиданням винятків / помилок і здійснює успішну транзакцію. Він повністю підтримує принцип СОЦ (розділення занепокоєння). Дуже чисто! Правила Java! :-)

1
Це виглядає як 3 питання до мене. Другий сам по собі занадто широкий.
Raedwald

Усі анотації за синтаксисом виглядають як інтерфейси. Отже, як компілятор або JVM знає своє призначення? Припустимо, якщо ми беремо @ Override -> здійснює перевірку того, чи метод переопрацьовано правильно чи ні Де ми можемо знайти визначення / логіку для всіх цих приміток?
Параміш Корракуті

Відповіді:


80

Анотації в основному використовуються кодом, який перевіряє інший код. Вони часто використовуються для зміни (тобто прикрашання або обгортання) існуючих класів під час виконання, щоб змінити свою поведінку. Такі рамки, як JUnit і Hibernate, використовують анотації, щоб мінімізувати кількість коду, який потрібно написати самому, щоб використовувати рамки.

Oracle має хороше пояснення поняття та його значення в Java на своєму сайті.


17

Також вони унікальні для Java, чи є еквівалент C ++?

Ні, але VB і C # мають атрибути, які є тим самим.

Їх використання досить різноманітне. Один типовий приклад Java @Overrideне впливає на код, але компілятор може використовувати його для створення попередження (або помилки), якщо оформлений метод насправді не перекриває інший метод. Аналогічно, методи можуть бути позначені застарілими.

Потім є роздуми. Коли ви відображаєте тип класу у своєму коді, ви можете отримати доступ до атрибутів та діяти відповідно до інформації, знайденої там. Я не знаю прикладів в Java, але в .NET цей компілятор використовується для генерації (де) серіалізації інформації для класів, визначення плану пам'яті структур та оголошення функції імпорту із застарілих бібліотек (серед інших). Вони також контролюють, як працює дизайнер форми IDE.

/ EDIT: Атрибути класів порівнянні з інтерфейсами тегів (наприклад, Serializable в Java). Однак, інструкції з кодування .NET говорять про те, що не використовувати інтерфейси тегів. Крім того, вони працюють лише на рівні класу, а не на рівні методу.


13

Андерс дає хороший підсумок, і ось приклад примітки JUnit

@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
    readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}

Тут @Testанотація говорить JUnit, що flatfileMissingметод - це тест, який слід виконати, і очікуваний результат є кинутим IOException. Таким чином, коли ви запускаєте тести, цей метод буде викликаний, і тест буде пройдений або невдалий, виходячи з того IOException, кинуто ан .


7

У Java також є інструмент обробки анотацій (apt), де ви не тільки створюєте анотації, але і вирішуєте, як ці примітки працюють над вихідним кодом.

Ось вступ.


4

Щоб побачити якісь цікаві речі, які ви можете зробити з Анотаціями, ознайомтеся з моїми примітками JavaBean та процесором анотацій .

Вони чудово підходять для створення коду, додавання додаткових перевірок під час збирання, і я також використовую їх для рамки повідомлень про помилки (ще не опубліковані - потрібно очистити з начальниками ...).


1

За буквальним визначенням анотація додає примітки до елемента. Аналогічно, анотації на Java - це теги, які ми вставляємо у вихідний код для надання додаткової інформації про код. Анотації Java пов'язують інформацію з елементом програми, що коментується. Окрім приміток Java, програми Java містять велику кількість неформальної документації, яка зазвичай міститься у коментарях до файлу вихідного коду. Але коментарі на Java відрізняються від коментарів, вони анотують елементи програми безпосередньо, використовуючи типи анотацій для опису форми приміток. Анотації на Java представляють інформацію стандартним та структурованим способом, щоб вона могла бути використана пристосовано засобами обробки.

Щоб детально прочитати, є хороший підручник з анотацій Java



0

Анотації, коли мова йде про EJB, відомий як вибір непрямого підходу в середньому посуді над явним підходом середнього посуду, коли ви використовуєте примітку, ви налаштовуєте, що саме вам потрібно з API, наприклад, вам потрібно зателефонувати за методом транзакцій для банківського переказу : без використання анотації: код буде

transfer(Account account1, Account account2, long amount)    
{
   // 1: Call middleware API to perform a security check
   // 2: Call middleware API to start a transaction
   // 3: Call middleware API to load rows from the database
   // 4: Subtract the balance from one account, add to the other
   // 5: Call middleware API to store rows in the database
   // 6: Call middleware API to end the transaction
}

під час використання Анотації ваш код не містить громіздких викликів API для використання проміжних служб. Код чистий і орієнтований на ділову логіку

transfer(Account account1, Account account2, long amount) 
{
   // 1: Subtract the balance from one account, add to the other
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.