Try English version of Quizful



Раздаем бесплатные Q! подробности в группе Quizful.Alpha-test
Партнеры
Рекрутерам: Прескрининг кандидатов about
Топ контрибуторов
loading
loading
Знаете ли Вы, что

Вы можете подписаться на RSS ленту новых тестов сервиса Quizful, в том числе и отдельно по каждой категории

Лента обновлений
ссылка 09:16:58
Комментарий от uic:
много вопросов, содержащих синтаксис с++11.
для теста по STL...
ссылка Nov 20 18:33
Комментарий от kozak95:
согласен
ссылка Nov 20 14:11
Комментарий от Leff:
pt, pc? Вы это серьезно? Рубеж 2017-2018 за окном!
Зачем де...
ссылка Nov 20 13:47
Комментарий от Leff:
19/20, но много вопросов по тем понятиям, которые уже давно...
ссылка Nov 20 01:38
Добавлен вопрос в тест CSS - Основы
Статистика

Тестов: 153, вопросов: 8578. Пройдено: 387276 / 1881083.

Аннотации в Java

head tail Статья
категория
Java
дата12.06.2014
авторAndreyCherevko
голосов14

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



Встроенные аннотации

В Java определено много полезных встроенных аннотаций, большинство из их являются специализированными. Аннотации, что имеют общее назначение:

  • @Retention - эта аннотация предназначена для применения только в качестве аннотации к другим аннотациям. Определяет политику удержания.
  • @Documented - это маркер-интерфейс, который сообщает инструменту, что аннотация должна быть документирована.
  • @Target - эта аннотация задает тип объявления, к которым может быть применима аннотация. Принимает один аргумент, который должен быть константой из перечисления ElementType. Например, чтобы указать, что аннотация применима только к полям и локальным переменным: @Targer({ ElementType.FIELD, ElementTyle.LOCAL_VARIABLE } )
  • @Inherited - это аннотация-маркер, которая может применяться в другом объявление аннотации, она касается только тех аннотаций, что будут использованы в объявлениях классов. Эта аннотация позволяет аннотации супер класса быть унаследованной в подклассе.
  • @Override - аннотация-маркер, которая может применяться только к методам. Метод, аннотированный как @Override, должен переопределять метод супер класса.
  • @Deprecated - указывает, что объявление устарело и должно быть заменено более новой формой.
  • @SafeVarargs - аннотация-маркер, применяется к методам и конструкторам. Она указывает, что никакие небезопасные действия, связанные с параметром переменного количества аргументов, недопустимы. Применяется только к методам и конструкторам с переменным количеством аргументов, которые объявлены как static или final.
  • @SuppressWarnings - эта аннотация указывает, что одно или более предупреждений, которые могут быть выданы компилятором следует подавить.

Создание собственных аннотаций:

Аннотации создаются с использование механизма, основанного на интерфейсе. Ниже пример объявление аннотации:


@interface My{
String str();
int val();
}

Символ @ - указывает компилятору, что объявлена аннотация. Методы, объявленные в аннотации ведут себя скорее как поля.


//Аннотирование метода.
@My(str = "Пример аннотации", val = 100)
public static void myMeth() { // ...

Как видите для аннотирования метода надо за именем аннотации, записать в скобках список инициализируемых членов.

Существует 3 политики удержания аннотации. Политика удержания определяет, в какой точке аннотация сбрасывается.

Такие политики инкапсулированы в перечисление java.lang.annotation.RetentionPolicy. Это SOURSE,CLASS,RUNTIME.

Аннотации с политикой SOURCE содержаться только в исходном файле и отбрасываются при компиляции.

Аннотации с политикой Class сохраняются в файле, однако они недоступны JVM во время выполнения.

Аннотации с политикой удержания RUNTIME сохраняются в файле во время компиляции и остаются доступными JVM во время выполнения.

Получение аннотации

Рефлексия - это средство позволяющее получить информацию о классе во время выполнения программы.Первый шаг в использование рефлексии - это получение объекта Class:


Class<?>  c = ob.getClass();

Далее используя объект типа Class вы можете получить информацию о различных элементах, объявленных в классе включая аннотацию.

Например методы: getMethod(), getField(), getConstructor(), все методы определены в java.lang.Class


Пример:

Class<?> c = ob.getClass();
Method m = c.getMethod("myMeth");
My anno = m.getAnnotation(My.class);

Этот пример использует рефлексию, что бы получить аннотацию MyAnno, ассоциированную с методом myMeth(). В параметры getMethod() передается название метода, который мы желаем получить.

Если Вам понравилась статья, проголосуйте за нее

Голосов: 14  loading...
katch   AndreyCherevko   Basuliic   Zusy_MT   chehonadskih   prochiy   Romantic   StudentS   pristroistvo_ek   evgeniyleusenko   Marian_Fediv   DmitryOrlik   klipet   SoulD