Новые возможности Java 5 Java Advanced. 2Georgiy KorneevJava Advanced / Новые возможности Java 5 Краткое содержание 1.Что такое generic 2.Реализация Generic.

Презентация:



Advertisements
Похожие презентации
Новые возможности Java 5 Java Advanced. 2Georgiy KorneevJava Advanced / Новые возможности Java 5 Краткое содержание 1.Generics 2.Реализация Generics 3.Generics.
Advertisements

Новые возможности Java 5 Java Advanced. 2Georgiy KorneevJava Advanced / Новые возможности Java 5 Содержание Перечисления Метаданные Другие возможности.
1Georgiy KorneevJava Advanced / Новые возможности Java 5 Проблема 1 Метод void dump(Collection c) { for (Iterator i = c.iterator(); i.hasNext(); ) { Object.

Лекция 2 Раздел 2.1 Windows Phone Темы раздела 3.
1. Определить последовательность проезда перекрестка
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
1 Знаток математики Тренажер Таблица умножения 2 класс Школа 21 века ®м®м.
Многопоточное программирование на Java Java Advanced.
Таблица умножения на 8. Разработан: Бычкуновой О.В. г.Красноярск год.
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Урок повторения по теме: «Сила». Задание 1 Задание 2.
Фрагмент карты градостроительного зонирования территории города Новосибирска Масштаб 1 : 6000 Приложение 7 к решению Совета депутатов города Новосибирска.
Фрагмент карты градостроительного зонирования территории города Новосибирска Масштаб 1 : 6000 Приложение 7 к решению Совета депутатов города Новосибирска.
Многопоточное программирование на Java Java Advanced.
Javadoc Java Advanced. 2Georgiy KorneevJava Advanced / Javadoc Содержание 1.Структура Javadoc 2.Блочные тэги 3.Строчные тэги 4.Применение Javadoc 5.Компиляция.
§ 22 Предпочитайте статические поля классов - другим.
Развивающая викторина для детей "Самый-самый " Муниципальное общеобразовательное учреждение средняя общеобразовательная школа 7 ст. Беломечётской.
Транксрипт:

Новые возможности Java 5 Java Advanced

2Georgiy KorneevJava Advanced / Новые возможности Java 5 Краткое содержание 1.Что такое generic 2.Реализация Generic 3.Смешение generic и не generic-кода 4.Autoboxing 5.Расширенный for 6.Varargs и format 7.Static Import 8.Перечисления 9.Заключение

Что такое generic Часть 1

4Georgiy KorneevJava Advanced / Новые возможности Java 5 Что такое Generic Generic параметризация класса времени компиляции Совместимость типов проверяется при компиляции Во время исполнения информация о фактическом типе отсутствует Единая реализация Template – параметризация класса времени исполнения

5Georgiy KorneevJava Advanced / Новые возможности Java 5 Generics и коллекции Коллекции, множетсва, списки, … параметризуются типом элемента Collection Set List … Отображения параметризуются типами ключа и значения Map SortedMap …

6Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример определения generic-класса public interface List extends Collection { E get(int i); set(int i, E e); add(E e); Iterator iterator();... }

7Georgiy KorneevJava Advanced / Новые возможности Java 5 Generic List List список элементов E Раньше List list = new List(); list.add(new Integer(1)); Integer i = (Integer) list.get(0); Теперь List list = new List (); list.add(new Integer(1)); Integer i = list.get(0);

8Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример. Подсчет количества слов Map map = new TreeMap (); for (Iterator i = c.iterator(); i.hasNext(); ) { String word = i.next(); Integer count = map.get(word); int value = (count == null) ? 0 : count.intValue(); map.put(word, new Integer(value + 1)); }

9Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример реализации generic-класса public class AL implements List { private E[] elements; public AL() { elements = (E[]) new Object[10]; } public E get(int i) { return elements[i]; }... }

10Georgiy KorneevJava Advanced / Новые возможности Java 5 Несовместимость generic-типов Generic-типы не совместимы по присваиванию List li = new ArrayList (); List lo = li; Иначе ошибки lo.add(hello); Integer li = lo.get(0); // ClassCastException

11Georgiy KorneevJava Advanced / Новые возможности Java 5 Проверка типов времени исполнения Класс Collections List checkedList(List, S.class) checkedCollection checkedMap …

Реализация Generic Часть 2

13Georgiy KorneevJava Advanced / Новые возможности Java 5 Проблема 1 Метод void dump(Collection c) { for (Iterator i = c.iterator(); i.hasNext(); ) { Object o = i.next(); System.out.println(o); } Вызовы List l; dump(l);

14Georgiy KorneevJava Advanced / Новые возможности Java 5 Решение 1 – wildcard Метод void dump(Collection c) { for (Iterator i = c.iterator(); i.hasNext(); ) { Object o = i.next(); System.out.println(o); } Вызовы List l; dump(l);

15Georgiy KorneevJava Advanced / Новые возможности Java 5 Проблема 2 Метод void draw(List c) { for (Iterator i = c.iterator(); i.hasNext(); ) { Shape s = i.next(); s.draw(); } Вызовы List l; draw(l);

16Georgiy KorneevJava Advanced / Новые возможности Java 5 Решение 2 – bounded wildcard Метод void draw(List c) { for (Iterator i = c.iterator(); i.hasNext(); ) { Shape s = i.next(); s.draw(); } Вызовы List l; draw(l);

17Georgiy KorneevJava Advanced / Новые возможности Java 5 Проблема 3 Метод void addAll(Object[] a, Collection c) { for (int i = 0; i < a.length; i++) { c.add(a[i]); }

18Georgiy KorneevJava Advanced / Новые возможности Java 5 Решение 3 – generic-метод Метод void addAll(T[] a, Collection c) { for (int i = 0; i < a.length; i++) { c.add(a[i]); } Примеры использования addAll(new String[10], new ArrayList ()); addAll(new Object[10], new ArrayList ()); addAll(new String[10], new ArrayList ()); addAll(new Object[10], new ArrayList ());

19Georgiy KorneevJava Advanced / Новые возможности Java 5 Проблема 4 Метод void addAll(Collection c, Collection c2) { for (Iterator i = c.iterator(); i.hasNext(); ) { T o = i.next(); c2.add(o); } Примеры использования addAll(new AL (), new AL ());

20Georgiy KorneevJava Advanced / Новые возможности Java 5 Решение 4 – bounded type argument Метод void addAll(Collection c, Collection c2) { for (Iterator i = c.iterator(); i.hasNext(); ) { S o = i.next(); c2.add(o); } Примеры использования addAll(new AL (), new AL ());

21Georgiy KorneevJava Advanced / Новые возможности Java 5 Решение 4 – bounded wildcard Метод void addAll(Collection c, Collection c2) { for (Iterator i = c.iterator(); i.hasNext(); ) { T o = i.next(); c2.add(o); } Примеры использования addAll(new AL (), new AL ());

22Georgiy KorneevJava Advanced / Новые возможности Java 5 Проблема 5 Метод > T max(Collection c) { … } Пример использования List il; Integer I = max(il); class Test implements Comparable {…} List tl; Test t = max(tl);

23Georgiy KorneevJava Advanced / Новые возможности Java 5 Решение 5 – upper bounded wcard Метод > max(Collection c) { … } Пример использования List il; Integer I = max(il); class Test implements Comparable {…} List tl; Test t = max(tl);

24Georgiy KorneevJava Advanced / Новые возможности Java 5 Ограничения Generic Невозможно создать массив параметра типа Collection c; T[] ta; new T[10]; Невозможно создать массив Generic- классов new ArrayList >(); List [] la = new List [10];

Смешение generic и не-generic кода Часть 3

26Georgiy KorneevJava Advanced / Новые возможности Java 5 Generic – один класс Примеры List ls; List li; ls.getClass() == li.getClass() // True ls instanceof List // True ls instanceof List

27Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример кода Collection c; Iterator i = c.iterator(); Integer max = i.next(); while(i.hasNext()) { Integer next = i.next(); if (next.compareTo(result) > 0) { max = next; }

28Georgiy KorneevJava Advanced / Новые возможности Java 5 Код без generic Collection c; Iterator i = c.iterator(); Integer max = (Integer) i.next(); while(i.hasNext()) { Integer next = (Integer) i.next(); if (next.compareTo(result) > 0) { max = next; }

29Georgiy KorneevJava Advanced / Новые возможности Java 5 Преобразование типов Уничтожение информации о типе List l = new ArrayList (); Добавление информации о типе List l = (List ) new ArrayList(); List l1 = new ArrayList(); Unchecked warning

Autoboxing Часть 4

31Georgiy KorneevJava Advanced / Новые возможности Java 5 Примитивные типы и обертки Примитивный типТип-обертка booleanBoolean byteByte shortShort charCharacter intInteger longLong floatFloat doubleDouble voidVoid

32Georgiy KorneevJava Advanced / Новые возможности Java 5 Boxing и Unboxing Boxing – заключение значения примитивного типа в обертку int a = …; new Integer(a) Unboxing – извлечение значения примитивного типа из обертки Integer a = …; a.intValue()

33Georgiy KorneevJava Advanced / Новые возможности Java 5 Autoboxing Генерация кода для boxing и unboxing при необходимости Явное приведение типов (Integer) 10 (int) new Integer(10) (Object) 10 Приведение типов по ходу

34Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример Исходный код Integer i1 = 1; Integer i2 = 2; Integer i3 = i1 + i2; Сгенерированный код Integer i1 = Integer.valueOf(1); Integer i2 = Integer.valueOf(2); Integer i3 = Integer.valueOf(i1.intValue() + i2.intValue());

35Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример. Подсчет количеств слов Map map = new TreeMap (); for (Iterator i = c.iterator(); i.hasNext(); ) { String word = i.next(); Integer count = map.get(word); m.put(word, (count == null) ? 1 : count + 1); }

36Georgiy KorneevJava Advanced / Новые возможности Java 5 Особенности Autoboxing Обработка null при unboxing NullPointerException Сравнение на равенство (==) Примитивные типы сравниваются по значению Обертки сравниваются по ссылке Снижение производительности

Расширенный цикл for Часть 5

38Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример. Сумма чисел в коллекции (1) Старый вариант (проверка на null) int sum = 0; for (Iterator i = c.iterator(); i.hasNext(); ) { Integer j = i.next(); if (j != null) { sum += j; }

39Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример. Сумма чисел в коллекции (2) Новый вариант (проверка на null) int sum = 0; for (Integer j : c) { if (j != null) { sum += j; }

40Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример. Сумма чисел в коллекции (3) Старый вариант int sum = 0; for (Iterator i = c.iterator(); i.hasNext(); ) { sum += i.next(); } Новый вариант int sum = 0; for (int j : c) { sum += j; }

41Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример. Минимум в массиве Старый вариант int min = Integer.MAX_VALUE; for (int i = 0; i < a.length; i++) { if (min > a[i]) min = a[i]; } Новый вариант int min = Integer.MAX_VALUE; for (int i : a) { if (min > i) min = i; }

42Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример. Подсчет количеств слов Map map = new TreeMap (); for (String word : c) { Integer count = map.get(word); m.put(word, (count == null) ? 1 : count + 1); }

43Georgiy KorneevJava Advanced / Новые возможности Java 5 Интерфейс Iterable Позволяет использовать новый for public interface Iterable { Iterator iterator(); } Реализуется стандартными коллекциями

Varargs и format Часть 6

45Georgiy KorneevJava Advanced / Новые возможности Java 5 Varargs Механизм создания методов, принимающих переменное число параметров

46Georgiy KorneevJava Advanced / Новые возможности Java 5 Методы.format Позволяют форматировать строки аналогично функции printf Классы Formatter String PrintWriter Пример String.format("(%d, %d)--(%d, %.3f)", 1, 1, 2, 0.5) System.out.format(Hello %s ", userName)

47Georgiy KorneevJava Advanced / Новые возможности Java 5 Определение метода Метод format format(String pattern, Object… arguments) Общий случай Последний аргумент может быть объявлен в виде T … Реальный тип аргумента T[] Может передаваться либо массив, либо переменное число аргументов

48Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример. Нахождение минимума Пример метода public static int min(int... a) { int min = Integer.MAX_VALUE; for (int i : a) { if (min > i) min = i; } return min; } Примеры использования min(3) min(1, 2, 3, -1, -2, -3) min(new int[]{1, 2, 3, -1, -2, -3})

49Georgiy KorneevJava Advanced / Новые возможности Java 5 Интерфейс Formattable Аналог метода toString() для класса Formattable (%s) Определение интерфейса interface Formattable { void formatTo( Formatter formatter, // куда выводить int flags, // как выводить int width, // мин. ширина поля int precision// макс. ширина поля ) }

Static Import Часть 7

51Georgiy KorneevJava Advanced / Новые возможности Java 5 Импортирование статических членов Импортирование поля import static java.lang.Math.PI; … angle = PI / 2 Импортирования метода import static java.lang.Math.cos; … cos(angle)

52Georgiy KorneevJava Advanced / Новые возможности Java 5 Применение Static Import При многократном доступе к статическим полям или методам других классов Для методоыв импортируются все перегруженные версии Широкое применение Static Import снижает читаемость кода

Перечисления Часть 8

54Georgiy KorneevJava Advanced / Новые возможности Java 5 Как было раньше Пример public final static int NEW = 1; public final static int RUNNING = 2; public final static int BLOCKED = 3; public final static int FINISHED = 4; Проблемы Нет проверки типов Нет проверки уникальности Плохая расширяемость Малая информативность

55Georgiy KorneevJava Advanced / Новые возможности Java 5 Перечислимый тип Пример public enum State { NEW, RUNNING, BLOCKED, FINISHED } Каждое перечисление является независимой областью видимости

56Georgiy KorneevJava Advanced / Новые возможности Java 5 Идентификация переменных Классом Экземпляром Именем Номером Имя Идентификатор экземпляра Метод name() Номер Может быть передан в конструктор экземпляра Метод ordinal()

57Georgiy KorneevJava Advanced / Новые возможности Java 5 Перечисления как классы Перечисление может иметь Закрытые конструкторы Поля Методы Абстрактные методы, если они определены в каждом экземпляре Перечисление может реализовывать интерфейсы

58Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример. Меры длины (1) public enum Unit { KILOMETER(1e3), METER(1), MILLIMETER(1e-3); private final double length; private Unit(double length) { this.length = length; } public double getLength() { return length; }

59Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример. Операции (1) public enum Operation { PLUS { double eval(double x, double y) { return x + y; } }, MINUS { double eval(double x, double y) { return x - y; } }, TIMES { double eval(double x, double y) { return x * y; } }, DIVIDE { double eval(double x, double y) { return x / y; } }; abstract double eval(double x, double y); }

60Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример. Операции (2) double apply(Operation op, double x, double y) { return op.eval(x, y); }

61Georgiy KorneevJava Advanced / Новые возможности Java 5 Методы работы с перечислениями Класс Enum – базовый для перечислений name() – имя ordinal() – номер valueOf(Class, name) – экземпляр по номеру Дополнительные values() – все экземпляры valueOf(name) – экземпляр по имени

62Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример. Меры длины (2) Вывод соотношений мер длины for (Unit u1 : Unit.values()) { for (Unit u2 : Unit.values()) { System.out.println(String.format( "There are %f %sS in one %s", u2.getLength()/u1.getLength(), u1, u2 )); }

63Georgiy KorneevJava Advanced / Новые возможности Java 5 Класс EnumSet Множество экземпляров перечисления Храниться побитно Создание EnumSet EnumSet EnumSet.noneOf(T.class) EnumSet EnumSet.allOf(T.class) EnumSet EnumSet.of(e1, e2, …) EnumSet EnumSet.copyOf(EnumSet s) EnumSet EnumSet.copyOf(Collection t) EnumSet EnumSet.complementOf(EnumSet s)

64Georgiy KorneevJava Advanced / Новые возможности Java 5 Класс EnumMap Отображение из перечисления Храниться в массиве Создание EnumMap EnumMap (K.class) EnumMap (EnumMap ) EnumMap (Map )

Заключение Часть 9

66Georgiy KorneevJava Advanced / Новые возможности Java 5 Ссылки (1) Generics Tutorial // tutorial.pdf tutorial.pdf JSR 14 (Generics) // Autoboxing // nguage/autoboxing.html nguage/autoboxing.html JSR 201 (Autoboxing) //

67Georgiy KorneevJava Advanced / Новые возможности Java 5 Ссылки (2) New Java Language Fatures // eatures.html#lang eatures.html#lang Enums (JLS) // n/html/classes.html#8.9 n/html/classes.html#8.9 Import Declarations (JLS) // n/html/packages.html#7.5 n/html/packages.html#7.5

68Georgiy KorneevJava Advanced / Новые возможности Java 5 Ссылки (3) Interfaces (JLS) // n/html/interfaces.html n/html/interfaces.html

69Georgiy KorneevJava Advanced / Новые возможности Java 5 Вопросы