Метаданные реализованы с помощью средств, основанных на интерфейсах. Начнем с примера. В следующих строках приведено объявление аннотации с именем MyAnnо:
@interface MyAnno {
String str();
int val();
}
Во-первых, обратите внимание на то, что ключевому слову interface предшествует символ @. Такая запись сообщает компилятору об объявлении аннотации. В объявлении также есть два метода-члена: String str() и int val (). Все аннотации содержат только объявления методов, но Вы не должны добавлять тела этим методам. Их реализует язык Java. Кроме того, как Вы увидите, эти методы действуют скорее как поля.
Все типы аннотаций автоматически расширяют интерфейс Annotation. Следовательно, тип Annotation служит суперинтерфейсом для всех аннотаций. Он объявлен в пакете java.lang.annotation, В этом интерфейсе перегружены методы: hashCode(), equals () и toString(), определенные в типе Object. В нем также определен метод annotationType(), который возвращает объект типа class, представляющий вызывающую аннотацию.
После того как Вы объявили аннотацию, Вы можете использовать ее для включения примечаний в объявления. Объявление любого типа может иметь аннотацию, связанную с ним. Например, можно снабжать примечаниями классы, методы, поля, параметры и константы типа enum. Даже к аннотации можно добавить аннотацию. Во всех случаях аннотация предшествует объявлению.
Когда Вы применяете аннотацию, Вы задаете значения для ее методов-членов. Далее приведен фрагмент, в котором аннотация MуАnnо сопровождает объявление метода:
// Аннотация для метода,
@MyAnno(str = "Annotation Example", val = 100)
public static void myMeth{) {
Приведенная аннотация связана с методом myMeth(). Рассмотрим внимательно синтаксис аннотации. За именем аннотации, начинающимся с символа @, следует заключенный в круглые скобки список инициализирующих значений для методов-членов. Для того чтобы передать значение методу-члену, имени этого метода присваивается значение. Таким образом, в приведенном фрагменте строка "Annotation Example" (Пример аннотации) присваивается методу str, члену аннотации типа MyАnnо. При этом в присваивании после имени str нет круглых скобок. Когда методу-члену передается инициализирующее значение, используется только имя метода. Следовательно, в данном контексте методы-члены выглядят как поля.
|