АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

FPMI : Балаганов

Читайте также:
  1. Студент: Балаганов отчислен:true
  2. Фамилия: Балаганов

Однако на перечисления накладывается целый ряд ограничений.

Им запрещено:

Ÿ быть суперклассами;

Ÿ быть подклассами;

Ÿ быть абстрактными;

Ÿ создавать экземпляры, используя ключевое слово new.

Аннотации

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

В следующем коде приведено объявление аннотации.

/* пример # 20: многочленная аннотация: RequestForCustomer.java */

package chapt03;

 

public @interface RequestForCustomer {

int level();

String description();

String date();

}

Ключевому слову interface предшествует символ @. Такая запись сообщает компилятору об объявлении аннотации. В объявлении также есть три метода-члена: int level(), String description(), String date().

Все аннотации содержат только объявления методов, добавлять тела этим методам не нужно, так как их реализует сам язык. Кроме того, эти методы не могут содержать параметров, секции throws и действуют скорее как поля. Допустимые типы возвращаемого значения: базовые типы, String, Enum, Class и массив любого из вышеперечисленных типов.

Все типы аннотаций автоматически расширяют интерфейс java.lang.annotation.Annotation. В этом интерфейсе даны методы: hashCode(), equals() и toString(), определенные в типе Object. В нем также приведен метод annotationType(), который возвращает объект типа Сlass, представляющий вызывающую аннотацию.

После объявления аннотации ее можно использовать для аннотирования объявлений. Объявление любого типа может иметь аннотацию, связанную с ним. Например, можно снабжать примечаниями классы, методы, поля, параметры и константы типа enum. Даже к аннотации можно добавить аннотацию. Во всех случаях аннотация предшествует объявлению.

Применяя аннотацию, нужно задавать значения для ее методов-членов. Далее приведен фрагмент, в котором аннотация RequestForCustomer сопровождает объявление метода:

@RequestForCustomer (

level = 2,

description = "Enable time",

date = "10/10/2007"

)

public void customerThroughTime() {

//...

}

Данная аннотация связана с методом customerThroughTime(). За именем аннотации, начинающимся с символа @, следует заключенный в круглые скобки список инициализирующих значений для методов-членов. Для того чтобы передать значение методу-члену, имени этого метода присваивается значение. Таким образом, в приведенном фрагменте строка "Enable time" присваивается методу description(), члену аннотации типа RequestForCustomer. При этом в присваивании после имени description нет круглых скобок. Когда методу-члену передается инициализирующее значение, используется только имя метода. Следовательно, в данном контексте методы-члены выглядят как поля.

/* пример # 21: применение аннотации: Request.java */

package chapt03;

import java.lang.reflect.Method;

 

public class Request {

@RequestForCustomer(level = 2,

description = "Enable time",

date = "10/10/2007")

public void customerThroughTime() {

try {

Class c = this. getClass();

Method m = c.getMethod("customerThroughTime");

RequestForCustomer ann =

m.getAnnotation(RequestForCustomer. class);

//запрос аннотаций

System. out. println(ann.level() + " "

+ ann.description() + " "

+ ann.date());

} catch (NoSuchMethodException e) {

System. out. println("метод не найден");

}

}

public static void main(String[] args) {

Request ob = new Request();

ob.customerThroughTime();

}

}

В результате будет выведено:


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)