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