Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Haulmont-презентации Java / Haulmont. java_se_8.ppt
Скачиваний:
51
Добавлен:
16.03.2015
Размер:
1 Мб
Скачать
☆

Перечислимые типы

51• Можно проверить равенство двух констант перечислимого типа с помощью операции

отношения = =

if(ар = = Apple.GoldenDel) //

•Значение перечислимого типа можно использовать для управления оператором switch

switch(ap) {

case Jonathan: //...

case Winsap: //...

default: //...

}

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Перечислимые типы

52• Во все перечислимые типы автоматически включены два метода: values() и vaiueOf()

•public static enumType[] values()

возвращает ссылку на массив ссылок на все константы перечислимого типа

Apple[] allApples = Apple.values();

• public static enumType valueOf(String str)

возвращает константу перечислимого типа, имя которой соответствует указанной строке, иначе выбрасывает исключение

Apple ap = Apple.valueOf(“Jonathan”);

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

 

 

Замечания:

53

•

Перечислимый тип в языке Java — это класс

 

 

•

Несмотря на то, что вы не можете инициализировать

 

 

переменную типа enum с помощью операции new, у

 

 

перечислимого типа много функциональных

 

 

возможностей таких же, как у других классов

 

•

К примеру, вы можете создать для него конструкторы,

 

 

добавить поля и методы и даже реализовать интерфейсы

 

•

Конструктор вызывается отдельно для каждой константы

 

•

Перечислимый тип не может наследовать другой класс,

 

 

но все перечислимые типы автоматически наследуют от

 

 

класса java.lang.Enum

 

•

Тип enum не может быть суперклассом (не может

 

 

расширяться)

 

•

Клонировать экземпляры перечиcлимых типов нельзя,

 

 

сравнивать и выполнять прочие стандартные операции –

 

 

можно

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Замечания:

54 Пример 14

enum Apple {

Jonathan(10), GoldenDel(9), RedDel, Winsap(15), Cortland(8);

private int price; Apple(int p) {

price = p;

}

Apple() { price = -1;

}

int getPrice() { return price;

}

}

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Метаданные

55• В основе механизма метаданных лежат так называемые аннотации

•Аннотация – это «интерфейс» специфического вида, позволяющий задавать описания классов и их элементов

@interface MyAnnotation { String str();

int val();

}

•Члены-методы имеют, скорее, смысл полей

•Тела этих методов будут создаваться автоматически Java

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Метаданные

56• Аннотациями можно снабжать классы, методы, поля, параметры, константы перечислимых

типов и аннотации

•В любом случае аннотация предшествует объявлению

•Все аннотации наследуют интерфейс java.lang.annotation.Annotation

@MyAnnotation(str = “Example”, val= 100) public static void myMeth() {...}

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Правила сохранения аннотаций

57• Правила сохранения аннотаций определяют, в какой момент аннотации будут уничтожены

•В языке Java описаны три таких правила — SOURCE, CLASS И RUNTIME, включенные в перечислимый тип java.lang.annotation.RetentionPolicy

•SOURCE – аннотация, заданная с правилом сохранения SOURCE, существует только в исходном тексте программы и отбрасывается во время компиляции

•CLASS – аннотация, заданная с правилом сохранения class, помещается в файл .class в процессе компиляции. Но она не доступна в JVM во время выполнения

•RUNTIME – аннотация, заданная с правилом сохранения runtime, помещается в файл .class в процессе компиляции и доступна в JVM во время выполнения.

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Правила сохранения аннотаций

58• Правило RUNTIME предлагает максимальную продолжительность существования аннотации

•Правило сохранения для аннотации задается с помощью одной из встроенных аннотаций @Retention

@Retention (retention-policy)

•В этой записи retention-policy задается одной из описанных ранее констант перечислимого типа

•Если для аннотации не задано правило сохранения, по умолчанию задается правило

CLASS

@Retention(RetentionPolicy.RUNTIME)

@interface myAnnotation { String str(); int val(); }

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Правила сохранения аннотаций

59• Получение информации об аннотациях производится средствами рефлексии

•Вы можете получить конкретную аннотацию, связанную с объектом, с помощью вызова метода getAnnotation() или использовать метод getAnnotations() для получения массива всех аннотаций

•Методы getAnnotation() и getAnnotations(), определены в новом интерфейсе

AnnotatedElement, который включен в пакет java.lang.reflect

•Этот интерфейс поддерживает рефлексию для аннотаций и реализован в классах Method,

Field, Сonstructor, Сlass и Package

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

 

 

Использование значений по

60

 

умолчанию

 

•

Вы можете передавать значения по умолчанию методам-

 

 

членам аннотаций, которые будут использоваться, если не

 

 

задано значение при вставке аннотации

 

•

Значение по умолчанию указывается с помощью

 

 

ключевого слова default в объявлении метода-члена

 

 

type member() default value;

 

•

Значение value должно иметь тип, совместимый с типом

 

 

type

@Retention(RetentionPolicy.RUNTIME) @interface MyAnnotation {

String str() default “Testing”; int val() default 9000; }

@MyAnnotation() @MyAnnotation(str = “some string”); @MyAnnotation(val = 100);

@MyAnnotation(str = “Testing”, val = 100);

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Соседние файлы в папке Haulmont-презентации Java