
Лекции Java / 09. Механизмы рефлексии. Нововведения Java5.pptx
.pdf
План лекции
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 |