Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемВероника Разгильдяева
1 Новые возможности Java 5 Java Advanced
2 2Georgiy KorneevJava Advanced / Новые возможности Java 5 Краткое содержание 1.Что такое generic 2.Реализация Generic 3.Смешение generic и не generic-кода 4.Autoboxing 5.Расширенный for 6.Varargs и format 7.Static Import 8.Перечисления 9.Заключение
3 Что такое generic Часть 1
4 4Georgiy KorneevJava Advanced / Новые возможности Java 5 Что такое Generic Generic параметризация класса времени компиляции Совместимость типов проверяется при компиляции Во время исполнения информация о фактическом типе отсутствует Единая реализация Template – параметризация класса времени исполнения
5 5Georgiy KorneevJava Advanced / Новые возможности Java 5 Generics и коллекции Коллекции, множетсва, списки, … параметризуются типом элемента Collection Set List … Отображения параметризуются типами ключа и значения Map SortedMap …
6 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();... }
7 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);
8 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)); }
9 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]; }... }
10 10Georgiy KorneevJava Advanced / Новые возможности Java 5 Несовместимость generic-типов Generic-типы не совместимы по присваиванию List li = new ArrayList (); List lo = li; Иначе ошибки lo.add(hello); Integer li = lo.get(0); // ClassCastException
11 11Georgiy KorneevJava Advanced / Новые возможности Java 5 Проверка типов времени исполнения Класс Collections List checkedList(List, S.class) checkedCollection checkedMap …
12 Реализация Generic Часть 2
13 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);
14 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);
15 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);
16 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);
17 17Georgiy KorneevJava Advanced / Новые возможности Java 5 Проблема 3 Метод void addAll(Object[] a, Collection c) { for (int i = 0; i < a.length; i++) { c.add(a[i]); }
18 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 ());
19 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 ());
20 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 ());
21 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 ());
22 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);
23 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);
24 24Georgiy KorneevJava Advanced / Новые возможности Java 5 Ограничения Generic Невозможно создать массив параметра типа Collection c; T[] ta; new T[10]; Невозможно создать массив Generic- классов new ArrayList >(); List [] la = new List [10];
25 Смешение generic и не-generic кода Часть 3
26 26Georgiy KorneevJava Advanced / Новые возможности Java 5 Generic – один класс Примеры List ls; List li; ls.getClass() == li.getClass() // True ls instanceof List // True ls instanceof List
27 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; }
28 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; }
29 29Georgiy KorneevJava Advanced / Новые возможности Java 5 Преобразование типов Уничтожение информации о типе List l = new ArrayList (); Добавление информации о типе List l = (List ) new ArrayList(); List l1 = new ArrayList(); Unchecked warning
30 Autoboxing Часть 4
31 31Georgiy KorneevJava Advanced / Новые возможности Java 5 Примитивные типы и обертки Примитивный типТип-обертка booleanBoolean byteByte shortShort charCharacter intInteger longLong floatFloat doubleDouble voidVoid
32 32Georgiy KorneevJava Advanced / Новые возможности Java 5 Boxing и Unboxing Boxing – заключение значения примитивного типа в обертку int a = …; new Integer(a) Unboxing – извлечение значения примитивного типа из обертки Integer a = …; a.intValue()
33 33Georgiy KorneevJava Advanced / Новые возможности Java 5 Autoboxing Генерация кода для boxing и unboxing при необходимости Явное приведение типов (Integer) 10 (int) new Integer(10) (Object) 10 Приведение типов по ходу
34 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());
35 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); }
36 36Georgiy KorneevJava Advanced / Новые возможности Java 5 Особенности Autoboxing Обработка null при unboxing NullPointerException Сравнение на равенство (==) Примитивные типы сравниваются по значению Обертки сравниваются по ссылке Снижение производительности
37 Расширенный цикл for Часть 5
38 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; }
39 39Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример. Сумма чисел в коллекции (2) Новый вариант (проверка на null) int sum = 0; for (Integer j : c) { if (j != null) { sum += j; }
40 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; }
41 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; }
42 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); }
43 43Georgiy KorneevJava Advanced / Новые возможности Java 5 Интерфейс Iterable Позволяет использовать новый for public interface Iterable { Iterator iterator(); } Реализуется стандартными коллекциями
44 Varargs и format Часть 6
45 45Georgiy KorneevJava Advanced / Новые возможности Java 5 Varargs Механизм создания методов, принимающих переменное число параметров
46 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)
47 47Georgiy KorneevJava Advanced / Новые возможности Java 5 Определение метода Метод format format(String pattern, Object… arguments) Общий случай Последний аргумент может быть объявлен в виде T … Реальный тип аргумента T[] Может передаваться либо массив, либо переменное число аргументов
48 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})
49 49Georgiy KorneevJava Advanced / Новые возможности Java 5 Интерфейс Formattable Аналог метода toString() для класса Formattable (%s) Определение интерфейса interface Formattable { void formatTo( Formatter formatter, // куда выводить int flags, // как выводить int width, // мин. ширина поля int precision// макс. ширина поля ) }
50 Static Import Часть 7
51 51Georgiy KorneevJava Advanced / Новые возможности Java 5 Импортирование статических членов Импортирование поля import static java.lang.Math.PI; … angle = PI / 2 Импортирования метода import static java.lang.Math.cos; … cos(angle)
52 52Georgiy KorneevJava Advanced / Новые возможности Java 5 Применение Static Import При многократном доступе к статическим полям или методам других классов Для методоыв импортируются все перегруженные версии Широкое применение Static Import снижает читаемость кода
53 Перечисления Часть 8
54 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; Проблемы Нет проверки типов Нет проверки уникальности Плохая расширяемость Малая информативность
55 55Georgiy KorneevJava Advanced / Новые возможности Java 5 Перечислимый тип Пример public enum State { NEW, RUNNING, BLOCKED, FINISHED } Каждое перечисление является независимой областью видимости
56 56Georgiy KorneevJava Advanced / Новые возможности Java 5 Идентификация переменных Классом Экземпляром Именем Номером Имя Идентификатор экземпляра Метод name() Номер Может быть передан в конструктор экземпляра Метод ordinal()
57 57Georgiy KorneevJava Advanced / Новые возможности Java 5 Перечисления как классы Перечисление может иметь Закрытые конструкторы Поля Методы Абстрактные методы, если они определены в каждом экземпляре Перечисление может реализовывать интерфейсы
58 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; }
59 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); }
60 60Georgiy KorneevJava Advanced / Новые возможности Java 5 Пример. Операции (2) double apply(Operation op, double x, double y) { return op.eval(x, y); }
61 61Georgiy KorneevJava Advanced / Новые возможности Java 5 Методы работы с перечислениями Класс Enum – базовый для перечислений name() – имя ordinal() – номер valueOf(Class, name) – экземпляр по номеру Дополнительные values() – все экземпляры valueOf(name) – экземпляр по имени
62 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 )); }
63 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)
64 64Georgiy KorneevJava Advanced / Новые возможности Java 5 Класс EnumMap Отображение из перечисления Храниться в массиве Создание EnumMap EnumMap (K.class) EnumMap (EnumMap ) EnumMap (Map )
65 Заключение Часть 9
66 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) //
67 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
68 68Georgiy KorneevJava Advanced / Новые возможности Java 5 Ссылки (3) Interfaces (JLS) // n/html/interfaces.html n/html/interfaces.html
69 69Georgiy KorneevJava Advanced / Новые возможности Java 5 Вопросы
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.