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

Ряд особенностей

41• Настраиваемый класс не может расширять

класс Throwable (нельзя создавать настраиваемые классы исключений)

•От настраиваемых типов можно наследовать, есть ряд особенностей

•Нельзя создать экземпляр массива, у которого базовый тип задан с помощью параметра типа

Пример 11

class Generic<T> { T[] vals; // Верно Generic(T[] nums) {

//vals = new T[10]; //Неверно vals = nums; // Верно

} }

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

© HAULMONT, 2013

Ряд особенностей

42• Нельзя создать массив из ссылок на объекты

конкретной версии настраиваемого типа

Generic<Integer>[] gens = new Generic<Integer>[10]; //Неверно

Generic<?>[] gens = new Generic<?>[10]; // Верно

•И как же это работает?

•Механизм стирания:

В реальном байт-коде никаких настраиваемых типов в целом-то и нет…

Вся информация о настраиваемых типах удаляется на стадии компиляции

Именно компилятор осуществляет контроль безопасности приведения типов

А внутри после компиляции все те же «обобщенные» классы, явные приведения типов и т.д.

•Возможны ошибки неоднозначности

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

© HAULMONT, 2013

Ошибки неоднозначности

43

Пример 12

 

 

class MyGenClass<T, V> {

 

T ob1;

 

V ob2;

 

// Неверно

 

void set(T o) {

 

ob1 = o;

 

}

 

void set(V o) {

 

ob2 = o;

 

}

 

}

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

© HAULMONT, 2013

Улучшенный цикл for(For-each)

44 • Имеется:

int[] nums = {1, 2, 3, 4, 5}; int sum = 0;

for (int i = 0; i < 5; i++) sum += nums[i];

•Хотелось бы:

int[] nums = {1, 2, 3, 4, 5}; int sum = 0;

for (int x: nums) sum += x;

•Общая форма записи:

for (type iterVar : iterableObj) statement

Где type – тип элемента, iterVar – переменная цикла, iterableObj – объект с элементами, statement – тело цикла

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

Работа улучшенного цикла for

45• В каждом витке цикла «извлекается» очередной элемент агрегата

•Ссылка на него (для ссылочных типов) или значение (для примитивных) помещается в переменную цикла

•Тип переменной цикла должен допускать присвоение элементов агрегата

•Цикл выполняется до тех пор, пока не будут перебраны все элементы агрегата

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

© HAULMONT, 2013

Обработка многомерных

массивов

46 Пример 13

int sum = 0;

int nums[][] = new int[3][5]; for (int i = 0; i < 3; i++)

for (int j = 0; j < 5; j++) nums[i][j] = (i + 1) * (j + 1);

for (int[] x: nums) for (int y: x)

sum += y;

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

© HAULMONT, 2013

 

 

Особенности улучшенного

47

 

 

цикла for

 

•

По сути это внутренний итератор

 

•

Переменная цикла доступна только для чтения

 

•

Порядок обхода в целом не определен

 

•

Нет доступа к соседним элементам

 

•

Агрегат обязан реализовывать интерфейс

 

 

java.lang.Iterable<T>

 

•

Этот интерфейс содержит лишь один элемент

 

 

Iterator<T> iterator()

 

•

Данный, вроде бы знакомый, интерфейс, тоже

 

 

претерпел некоторые изменения:

 

 

 

boolean hasNext()

 

 

 

void remove()

 

 

 

T next()

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

© HAULMONT, 2013

Вывод

48• Область применения обобщенного цикла for «несколько уже», чем у «необобщенной»

версии

• Зато для этого класса задач (поиск среднего арифметического, поиск минимального или максимального значения в наборе, поиск дублирующих значений и т. д.) синтаксис обобщенного цикла существенно удобнее

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

© HAULMONT, 2013

 

 

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

49

•

В простейшей форме перечислимый тип — это список

 

 

 

именованных констант

 

•

Перечислимый тип создается с помощью нового ключевого

 

 

слова enum

 

•

Имеется:

 

 

class Apple {

 

 

public static final int JONATHAN = 0;

 

 

public static final int GOLDENDEL = 1;

 

 

public static final int REDDEL = 2;

 

 

public static final int WINESAP = 3;

 

 

public static final int CORTLAND = 4;

 

 

}

 

•

Хотелось бы:

enum Apple {

Jonathan, GoldenDel, RedDel, Winesap, Cortland

}

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

© HAULMONT, 2013

 

 

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

50

•

Перечислимый тип Apple. Идентификаторы Jonathan,

 

 

 

GoldenDel и так далее называются константами

 

 

перечислимого типа

 

•

Каждая объявляется неявно общедоступным,

 

 

статическим членом класса Apple

 

•

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

 

 

создать переменную этого типа

 

•

Но, несмотря на то что перечислимые типы определены

 

 

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

 

 

с помощью операции new

 

•

Вместо этого вы объявляете и используете переменную

 

 

перечислимого типа почти так же, как вы поступаете с

 

 

переменными одного из базовых типов, таких как int или

 

 

char

Apple ap;

ap = Apple.RedDel;

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

© HAULMONT, 2013

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