Новые возможности java 5
DESCRIPTION
Новые возможности Java 5. Java Advanced. Содержание. Перечисления Метаданные Другие возможности Заключение. Часть 1. Перечисления. Как было раньше. Пример public final static int NEW = 1; public final static int RUNNING = 2; public final static int BLOCKED = 3; - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/1.jpg)
Новые возможности Java 5
Java Advanced
![Page 2: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/2.jpg)
Java Advanced / Новые возможности Java 5 2Georgiy Korneev
Содержание
ПеречисленияМетаданныеДругие возможностиЗаключение
![Page 3: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/3.jpg)
ПеречисленияЧасть 1
![Page 4: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/4.jpg)
Java Advanced / Новые возможности Java 5 4Georgiy Korneev
Как было раньше
Примерpublic final static int NEW = 1;
public final static int RUNNING = 2;
public final static int BLOCKED = 3;
public final static int FINISHED = 4;
Проблемы Нет проверки типов Нет проверки уникальности Плохая расширяемость Малая информативность
![Page 5: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/5.jpg)
Java Advanced / Новые возможности Java 5 5Georgiy Korneev
Перечислимый тип
Примерpublic enum State {
NEW,
RUNNING,
BLOCKED,
FINISHED
}
Каждое перечисление является независимой областью видимости
![Page 6: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/6.jpg)
Java Advanced / Новые возможности Java 5 6Georgiy Korneev
Идентификация переменных
Классом Экземплярами Именами Номерами
Имя Идентификатор экземпляра Метод name()
Номер Может быть передан в конструктор экземпляра Метод ordinal()
![Page 7: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/7.jpg)
Java Advanced / Новые возможности Java 5 7Georgiy Korneev
Перечисления как классы
Перечисление может иметь Закрытые конструкторы Поля Методы Абстрактные методы, если они определены в
каждом экземпляре
Перечисление может реализовывать интерфейсы
![Page 8: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/8.jpg)
Java Advanced / Новые возможности Java 5 8Georgiy Korneev
Пример: меры длины
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; }}
![Page 9: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/9.jpg)
Java Advanced / Новые возможности Java 5 9Georgiy Korneev
Методы работы с перечислениями
Класс Enum – базовый для перечислений name() – имя ordinal() – номер valueOf(Class, name) – экземпляр по номеру
Дополнительные values() – все экземпляры valueOf(name) – экземпляр по имени
Методы классов isEnum() – является ли перечислением getEnumConstants() –все экземпляры
![Page 10: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/10.jpg)
МетаданныеЧасть 2
![Page 11: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/11.jpg)
Java Advanced / Новые возможности Java 5 11Georgiy Korneev
Метаданные и аннотации
Метаданные – информация, непосредственно не влияющая на выполнение программы
Аннотации – тип метаданных в Java
![Page 12: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/12.jpg)
Java Advanced / Новые возможности Java 5 12Georgiy Korneev
Пример определения аннотации
public @interface RequestForEnhancement {
int id();
String synopsis();
String engineer() default "[unassigned]";
String date() default "[unimplemented]";
}
Маркер аннотации
Определения полей
Значения по умолчанию
Имя аннотации
![Page 13: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/13.jpg)
Java Advanced / Новые возможности Java 5 13Georgiy Korneev
Пример использования аннотации
@RequestForEnhancement(
id = 2868724,
synopsis = "Enable time-travel",
engineer = "Mr. Peabody",
date = "4/1/3007"
)
public static void travelThroughTime(
Date destination)
![Page 14: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/14.jpg)
Java Advanced / Новые возможности Java 5 14Georgiy Korneev
Типы аннотаций
ОбыкновеннаяМаркерная – без параметров
Может использоваться без скобок
Одиночная – с одним параметром Параметр должен называться value() Может инициализироваться без указания
имени параметра
![Page 15: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/15.jpg)
Java Advanced / Новые возможности Java 5 15Georgiy Korneev
Типы параметров аннотаций
Возможные типы Примитивные типы String Class Перечислимый тип Аннотация Массив вышеперечисленного
![Page 16: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/16.jpg)
Java Advanced / Новые возможности Java 5 16Georgiy Korneev
Время жизни аннотации
Аннотация @Retention(RetentionPolicy)Возможные значения
SOURCE – до компиляции CLASS – в класс файле RUNTIME – во время выполнения
![Page 17: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/17.jpg)
Java Advanced / Новые возможности Java 5 17Georgiy Korneev
Применимость аннотации
Аннотация @Target(ElementType[])Возможные значения
TYPE – любой тип FIELD – поле класса METHOD – метод класса CONSTRUCTOR – конструктор класса PARAMETER – параметр метода LOCAL_VARIABLE – локальная переменная ANNOTATION_TYPE – аннотация PACKAGE – пакет
![Page 18: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/18.jpg)
Java Advanced / Новые возможности Java 5 18Georgiy Korneev
Наследование аннотаций
Аннотация @InheritedАннотация объявленная @Inherited
автоматически наследуются при переопределении метода / класса
![Page 19: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/19.jpg)
Java Advanced / Новые возможности Java 5 19Georgiy Korneev
Аннотации и документация
Аннотация @DocumentedАннотация объявленная @Documented
попадает в JavaDoc аннотированного документа
Применяется для аннотаций, изменяющих поведение
![Page 20: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/20.jpg)
Java Advanced / Новые возможности Java 5 20Georgiy Korneev
Аннотация @SuppressWarnings
Подавляет генерацию предостережений указанного тип при компиляции аннотированного элемента
Пример@SuppressWarnings("unchecked")
public T<E> toArray() {
return (T<E>[]) list.toArray(new T[]);
}
![Page 21: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/21.jpg)
Java Advanced / Новые возможности Java 5 21Georgiy Korneev
Аннотация @Deprecated
Помечает метод как deprecatedПример
@Deprecated
public final void stop() {
…
}
![Page 22: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/22.jpg)
Java Advanced / Новые возможности Java 5 22Georgiy Korneev
Аннотации во время выполнения
Интерфейс AnnotatedElementМетоды
isAnnotationPresent(Class) – проверяет наличие аннотации данного типа
getAnnotation(Class) – возвращает аннотацию данного типа.
getAnnotations() – все аннотации getDeclaredAnnotations() – непосредственно
объявленные аннотации
![Page 23: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/23.jpg)
Java Advanced / Новые возможности Java 5 23Georgiy Korneev
Пример: тестирование (1)
Аннотация@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test { }
Пример использованияpublic class SimpleTest {
@Test public void testXXX();
@Test public void testYYY();
}
![Page 24: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/24.jpg)
Java Advanced / Новые возможности Java 5 24Georgiy Korneev
Пример: тестирование (2)
Запуск тестов for (Method m : clazz.getMethods()) { if (m.isAnnotationPresent(Test.class)) { try { m.invoke(null); } catch (Throwable ex) { System.out.printf("Test %s failed: %s %n", m, ex.getCause()); } }}
![Page 25: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/25.jpg)
Java Advanced / Новые возможности Java 5 25Georgiy Korneev
APT и Mirror API
Annotation Processing Tool – позволяет работать с аннотациями до компиляции программы
Mirror API – позволяет работать с информацией о классах до их компиляции
![Page 26: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/26.jpg)
Другие возможности Часть 3
![Page 27: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/27.jpg)
Java Advanced / Новые возможности Java 5 27Georgiy Korneev
Переменное число аргументов
Методы с переменным числом аргументов method(args, Type … name) -- сигнатура method – имя метода args – список обычных аргументов Type – тип дополнительных аргументов name – имя формального параметра
Формальный параметр имеет тип Type[]
![Page 28: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/28.jpg)
Java Advanced / Новые возможности Java 5 28Georgiy Korneev
Статические импорты
Статические члены могут быть импортированыimport static Math.PI;
…
angle = PI / 2
Статические метод может быть импортированimport static Math.cos()
…
cos(angle)
![Page 29: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/29.jpg)
ЗаключениеЧасть 4
![Page 30: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/30.jpg)
Java Advanced / Новые возможности Java 5 30Georgiy Korneev
Ссылки (1)
New Java Language Fatures // http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html#lang
Enums (JLS) // http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.9
Import Declarations (JLS) // http://java.sun.com/docs/books/jls/third_edition/html/packages.html#7.5
![Page 31: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/31.jpg)
Java Advanced / Новые возможности Java 5 31Georgiy Korneev
Ссылки (2)
Interfaces (JLS) // http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html
Getting started with APT // http://java.sun.com/j2se/1.5.0/docs/guide/apt/GettingStarted.html
Mirror API // http://java.sun.com/j2se/1.5.0/docs/guide/apt/mirror/overview-summary.html
![Page 32: Новые возможности Java 5](https://reader036.vdocuments.site/reader036/viewer/2022081503/568133d2550346895d9acbcd/html5/thumbnails/32.jpg)
Java Advanced / Новые возможности Java 5 32Georgiy Korneev
Вопросы