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

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

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