Вы только что написали аннотацию .
В частности, в отношении оператора default
: он используется, потому что у аннотаций и интерфейсов не может быть конструкторов, поэтому это единственный способ получить значение по умолчанию для атрибута аннотации. Из спецификации языка Java :
Для элемента типа аннотации может быть указано значение по умолчанию. Это можно сделать, следуя его (пустому) списку параметров с ключевым словом default
и значением элемента по умолчанию.
Значения по умолчанию применяются динамически во время чтения аннотаций; значения по умолчанию не скомпилированы в аннотации. Таким образом, изменение значения по умолчанию влияет на аннотации даже в тех классах, которые были скомпилированы до внесения изменений (при условии, что в этих аннотациях отсутствует явное значение для элемента по умолчанию).
Замечу, что ни одна из аннотаций в java.lang.annotation не использует значения по умолчанию.
Использование: У вас есть аннотация @HelloWorld
с атрибутом sayHello
. Вы могли бы поместить это в класс как это:
@HelloWorld(sayHello="Hi")
public class MyClass {
}
Поскольку у вас есть значение по умолчанию, вы можете просто поставить
@HelloWorld
public class MyClass {
}
(Обратите внимание, что в документе говорится: «В аннотациях с одним элементом этот элемент должен называться value
»; я считаю, что единственная причина для этого заключается в том, что вы можете просто написать @HelloWorld("Hi")
без указания имени параметр.)
Как написано, ваша аннотация может использоваться для любого допустимого элемента программы (включая методы и объявления переменных). Вы можете изменить это с помощью аннотации @Target
.
Наконец, установка RetentionPolicy
позволяет вам решить, следует ли аннотации отбрасываться компилятором, сбрасываться виртуальной машиной или сохраняться всегда.
Два пакета, которые также могут быть интересны: javax.annotation и javax.annotation.processing . И здесь - пример использования обработки аннотаций для анализа исходного кода.