Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции Java / 09. Механизмы рефлексии. Нововведения Java5.pptx

.pdf
Скачиваний:
144
Добавлен:
16.03.2015
Размер:
223.45 Кб
Скачать

План лекции

nСтатический импорт

nАвтоупаковка/автораспаковка

nПеременное количество аргументов в методах

nПараметризованные типы

nЦикл for-each

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

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

21

Проблема

n Имеется:

hypot = Math.sqrt(Math.pow(side1, 2) + Math.pow(side2, 2));

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

hypot = sqrt(pow(side1, 2) + pow(side2, 2));

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

22

Статический импорт

n Импорт элемента типа

import static pkg.TypeName.staticMemberName;

import static java.lang.Math.sqrt; import static java.lang.Math.pow;

n Импорт всех элементов типа

import static pkg.TypeName.*;

import static java.lang.Math.*;

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

23

Особенности статического импорта

nПовышает удобство написания программ и уменьшает объем кода

nУменьшает удобство чтения программ

nПриводит к конфликтам имен

nМораль: рекомендуется к использованию только когда действительно необходим

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

24

Проблема

n Имеется:

List list = new LinkedList(); list.add(new Integer(1)); list.add(new Integer(10));

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

List list = new LinkedList(); list.add(1);

list.add(10);

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

25

Автоупаковка и автораспаковка

nАвтоупаковка – процесс автоматической инкапсуляции данных простого типа в экземпляр соответствующего ему класса-обертки в случаях, когда требуется значение ссылочного типа

nАвтораспаковка – процесс автоматического извлечения примитивного значения из объектаупаковки в случаях, когда требуется значение примитивного типа

List list = new LinkedList(); list.add(1);

int b = (Integer)list.get(0) + 10;

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

26

Особенности автоупаковки

nПроисходит при присваивании, вычислении выражений и при передаче параметров

nОбъекты создаются без использования

ключевого слова new

Integer i = 15;

nОбъекты создаются!

nВотще полагать, что примитивные типы не нужны

nАвтоупаковка требует существенных ресурсов

nЗлоупотреблять автоупаковкой вообще не стоит!

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

27

Проблема

n Имеется:

int s1 = sum(new int[] {1, 2}); int s2 = sum(new int[] {1, 2, 3});

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

int s1 = sum(1, 2);

int s2 = sum(1, 2, 3, 4);

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

28

Переменное количество аргументов

n Пример метода

int sum(int ... a) { int s = 0;

for (int i = 0; i < a.length; i++) s += a[i];

}

n Пример вызова

int s2 = sum(1, 2, 3);

int s1 = sum(new int[] {1, 2});

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

29

Особенности переменного количества аргументов

nВнутри там все равно живет массив…

nАргумент переменной длинны в методе может быть только один

nАргумент переменной длинны должен быть последним в списке аргументов метода

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

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

30