Чтение онлайн

на главную

Жанры

Java: руководство для начинающих
Шрифт:

В данном примере объявляется аннотация MyAnno. Обратите внимание на то, что ключевое слово interface предваряется знаком @. Таким образом компилятору сообщается об объявлении аннотации. Обратите также внимание на два члена — str и val . Все аннотации содержат лишь объявления методов, а их тела указывать нельзя. Объявленные методы реализует исполняющая система Java, причем они действуют подобно полям.

Аннотации всех типов автоматически расширяют интерфейс Annotation. Следовательно, Annotation служит в качестве суперинтерфейса для всех аннотаций. Он входит в пакет java.lang.annotation.

Объявив аннотацию, ее можно использовать для аннотирования объявления. Аннотацию можно связать

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

Применяя аннотацию, вы тем самым задаете значения ее членов. Ниже приведен пример аннотации MyAnno, применяемой к методу. // Аннотирование метода. @MyAnno(str = "Annotation Example", val = 100) public static void myMeth { // ...

Эта аннотация связывается с методом myMeth . Обратите внимание на синтаксис аннотации. Имени аннотации предшествует знак @, а после имени следует список, предназначенный для инициализации ее членов. Для того чтобы задать значение члена аннотации, следует присвоить это значение имени данного члена. В рассматриваемом здесь примере символьная строка "Annotation Example" (Пример аннотации) присваивается члену str аннотации MyAnno. Обратите внимание на то, что в операторе присваивания скобки после члена str не указываются. При присваивании значения члену аннотации используется только его имя. В этом отношении члены аннотации похожи на поля.

Аннотация без параметров называется маркером. При определении маркера круглые скобки не указываются. Главное назначение маркера — пометить объявление некоторым атрибутом.

В Java определено немало встроенных аннотаций. Некоторые из них считаются аннотациями общего назначения, но большинство являются специализированными. В пакет java.lang.annotation входят аннотации ©Retention, ©Documented, @Target и @Inherited. Аннотации @Override, @Deprecated и ©SuppressWarnings включены в пакет ava.lang. Назначение этих семи аннотаций приведено в табл. 12.1.

Таблица 12.1. Встроенные аннотации Аннотация Описание @Retention Определяет правила сохранения, связываемые с аннотацией. Правила сохранения определяют, как долго аннотация будет присутствовать в процессе компиляции и развертывания прикладной программы @Documented Маркер, сообщающий инструментальному средству о том, что аннотация документируется. Желательно использовать только как аннотацию к аннотации объявления @Target Задает виды объявлений, к которым может быть применена аннотация. Желательно использовать только в качестве одной аннотации к другой. Данная аннотация принимает аргумент в виде константы перечислимого типа ElementType, в котором определены различные константы, в том числе CONSTRUCTOR, FIELD и METHOD. Аргумент определяет виды объявлений, к которым может быть применена аннотация @Inherited Маркер, указывающий на то, что аннотация суперкласса должна наследоваться подклассом @Override Метод, аннотированный как ©Override, должен переопределять метод суперкласса. Если это условие не выполняется, возникает ошибка при компиляции. Данная аннотация представляет собой маркер и позволяет убедиться в том, что метод суперкласса действительно переопределен, а неперегружен @Deprecated Маркер, указывающий на то, что объявление устарело и было заменено новым @SuppressWarnings Указывает на то, что одно или несколько предупреждающих сообщений, которые могут быть сгенерированы при компиляции, должны быть подавлены. Предупреждающие сообщения задаются именами, представленными в строковом виде

Ниже приведен пример, в котором аннотацией @Deprecated помечаются класс MyClass и метод getMsg .

При попытке скомпилировать программу будет выведено сообщение о том, что в исходном коде содержатся устаревшие и не рекомендованные к применению элементы. // Пример использования аннотации @Deprecated. // Пометить класс как не рекомендованный к применению. @Deprecated class MyClass { private String msg; MyClass(String m) { msg = m; } // Пометить метод в классе как // не рекомендованный к применению. @Deprecated String getMsgO { return msg; } // ... } class AnnoDemo { public static void main(String args[]) { MyClass myObj = new MyClass("test"); System.out.println(myObj.getMsg); } } Упражнение для самопроверки по материалу главы 12

Константы перечислимого типа иногда называют самотипизированными. Что это означает?

Какой класс автоматически наследуют перечисления?

Напишите для приведенного ниже перечисления программу, в которой метод values служит для отображения списка констант и их значений. enum Tools { SCREWDRIVER, WRENCH, HAMMER, PLIERS }

Программу, имитирующую автоматизированный светофор и созданную в примере для опробования 12.1, можно усовершенствовать, внеся ряд простых изменений, чтобы выгодно воспользоваться возможностями перечислений. В исходной версии этой программы продолжительность отображения каждого цвета светофора регулировалась в классе Traf f icLightSimulator, причем величины задержек были жестко запрограммированы в методе run . Измените исходный код программы таким образом, чтобы продолжительность отображения каждого цвета светофора задавалась константами перечислимого типа Traf f icLightColor. Для этого вам понадобятся конструктор, переменная экземпляра, объявленная как private, а также метод getDelay . Подумайте о том, как еще можно улучшить данную программу. (Подсказка: попробуйте отказаться от оператора switch и воспользоваться порядковыми значениями каждого цвета для переключения светофора.)

Что такое упаковка и распаковка? В каких случаях производится автоупаковка и автораспаковка?

Измените следующий фрагмент кода таким образом, чтобы в нем производилась автоупаковка: Short val = new Short (123);

Объясните, что такое статический импорт?

Какие действия выполняет приведенный ниже оператор? import static java.lang.Integer.parselnt;

Следует ли употреблять статический импорт от случая к случаю или желательно импортировать статические члены всех классов?

Синтаксис аннотации основывается на .

Какая аннотация называется маркером?

Аннотации применимы только к методам. Верно или неверно?

Глава 13 Обобщения

Основные навыки и понятия

Преимущества обобщений

Создание обобщенного класса

Применение ограниченных параметров типов

Использование метасимвольных аргументов

Применение ограниченных метасимвольных аргументов

Создание обобщенного метода

Создание обобщенного конструктора

Создание обобщенного интерфейса

Использование базовых типов

Выводимость типов с помощью ромбовидного оператора

Стирание

Исключение ошибок неоднозначности

Наложение ограничений на обобщения

Начиная с версии 1.0 в Java было реализовано много новых языковых средств. Все они очень полезны и расширяют область применения Java, но на одном из них следует остановиться особо, поскольку оно оказывает огромное влияние на язык в целом. Речь идет об обобщениях — совершенно новой синтаксической конструкции, появление которой вызвало существенные изменения во многих классах и методах базового интерфейса API. Не будет преувеличением сказать, что введение обобщений коренным образом изменило сам язык Java.

Поделиться:
Популярные книги

Камень. Книга пятая

Минин Станислав
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Камень. Книга пятая

Черный маг императора

Герда Александр
1. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Черный маг императора

Кодекс Крови. Книга VI

Борзых М.
6. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VI

Отверженный. Дилогия

Опсокополос Алексис
Отверженный
Фантастика:
фэнтези
7.51
рейтинг книги
Отверженный. Дилогия

Неудержимый. Книга XIII

Боярский Андрей
13. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIII

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Начальник милиции. Книга 3

Дамиров Рафаэль
3. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 3

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Лорд Системы 13

Токсик Саша
13. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 13

На границе империй. Том 9. Часть 4

INDIGO
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 4

Вторая невеста Драконьего Лорда. Дилогия

Огненная Любовь
Вторая невеста Драконьего Лорда
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Вторая невеста Драконьего Лорда. Дилогия

Неудержимый. Книга X

Боярский Андрей
10. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга X

Гарем вне закона 18+

Тесленок Кирилл Геннадьевич
1. Гарем вне закона
Фантастика:
фэнтези
юмористическая фантастика
6.73
рейтинг книги
Гарем вне закона 18+

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания