Try English version of Quizful



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

Свои вопросы для тестов можно добавлять на странице с информацией о тесте. При этом для некоторых тестов добавление вопросов закрыто

Лента обновлений
ссылка Jun 23 18:26
Комментарий от Bawarez:
не путайте понятия "знание работы с символами" и "знание...
ссылка Jun 23 02:39
Комментарий от Cat909:
Есть ошибка в тексте вопроса; правильно будет "реализоват...
ссылка Jun 22 17:04
Комментарий от MiXProjecT:
Правильный ответ "Ошибка выполнения запроса". Провере...
ссылка Jun 22 15:47
Комментарий от bugnet425:
Решение через систему уравнений в один цикл за один пр...
ссылка Jun 22 13:33
Комментарий от dieselok161:
Либо объясните, либо удалите этот вопрос)))
Статистика

Тестов: 153, вопросов: 8596. Пройдено: 409021 / 1990945.

Аннотации в Java

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

Аннотация - средство, что позволяет встроить информацию поддержки в исходные файлы, то есть аннотации можно использовать для отслеживания ошибок, устранения предупреждений, генерации кода, 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() передается название метода, который мы желаем получить.

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

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