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

Содержание

Слайд 2

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

Содержание

Перечисления
Метаданные
Другие возможности
Заключение

Java Advanced / Новые возможности Java 5 Содержание Перечисления Метаданные Другие возможности Заключение

Слайд 3

Перечисления

Часть 1

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

Слайд 4

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

Как было раньше

Пример
public final static int

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

Слайд 5

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

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

Пример
public enum State {
NEW,

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

Слайд 6

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

Идентификация переменных

Классом
Экземплярами
Именами
Номерами
Имя
Идентификатор экземпляра
Метод name()
Номер
Может быть передан

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

Слайд 7

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

Перечисления как классы

Перечисление может иметь
Закрытые конструкторы
Поля
Методы
Абстрактные

Java Advanced / Новые возможности Java 5 Перечисления как классы Перечисление может
методы, если они определены в каждом экземпляре
Перечисление может реализовывать интерфейсы

Слайд 8

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

Пример: меры длины

public enum Unit {

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

Слайд 9

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

Методы работы с перечислениями

Класс Enum –

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

Слайд 10

Метаданные

Часть 2

Метаданные Часть 2

Слайд 11

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

Метаданные и аннотации

Метаданные – информация, непосредственно

Java Advanced / Новые возможности Java 5 Метаданные и аннотации Метаданные –
не влияющая на выполнение программы
Аннотации – тип метаданных в Java

Слайд 12

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

Пример определения аннотации
public @interface RequestForEnhancement {

Java Advanced / Новые возможности Java 5 Пример определения аннотации public @interface
int id();
String synopsis();
String engineer() default "[unassigned]";
String date() default "[unimplemented]";
}

Маркер аннотации

Определения
полей

Значения по умолчанию

Имя аннотации

Слайд 13

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

Пример использования аннотации

@RequestForEnhancement(
id = 2868724,

Java Advanced / Новые возможности Java 5 Пример использования аннотации @RequestForEnhancement( id
synopsis = "Enable time-travel",
engineer = "Mr. Peabody",
date = "4/1/3007"
)
public static void travelThroughTime(
Date destination)

Слайд 14

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

Типы аннотаций

Обыкновенная
Маркерная – без параметров
Может использоваться

Java Advanced / Новые возможности Java 5 Типы аннотаций Обыкновенная Маркерная –
без скобок
Одиночная – с одним параметром
Параметр должен называться value()
Может инициализироваться без указания имени параметра

Слайд 15

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

Типы параметров аннотаций

Возможные типы
Примитивные типы
String
Class
Перечислимый тип
Аннотация
Массив

Java Advanced / Новые возможности Java 5 Типы параметров аннотаций Возможные типы
вышеперечисленного

Слайд 16

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

Время жизни аннотации

Аннотация @Retention(RetentionPolicy)
Возможные значения
SOURCE –

Java Advanced / Новые возможности Java 5 Время жизни аннотации Аннотация @Retention(RetentionPolicy)
до компиляции
CLASS – в класс файле
RUNTIME – во время выполнения

Слайд 17

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

Применимость аннотации

Аннотация @Target(ElementType[])
Возможные значения
TYPE – любой

Java Advanced / Новые возможности Java 5 Применимость аннотации Аннотация @Target(ElementType[]) Возможные
тип
FIELD – поле класса
METHOD – метод класса
CONSTRUCTOR – конструктор класса
PARAMETER – параметр метода
LOCAL_VARIABLE – локальная переменная
ANNOTATION_TYPE – аннотация
PACKAGE – пакет

Слайд 18

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

Наследование аннотаций

Аннотация @Inherited
Аннотация объявленная @Inherited автоматически

Java Advanced / Новые возможности Java 5 Наследование аннотаций Аннотация @Inherited Аннотация
наследуются при переопределении метода / класса

Слайд 19

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

Аннотации и документация

Аннотация @Documented
Аннотация объявленная @Documented

Java Advanced / Новые возможности Java 5 Аннотации и документация Аннотация @Documented
попадает в JavaDoc аннотированного документа
Применяется для аннотаций, изменяющих поведение

Слайд 20

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

Аннотация @SuppressWarnings

Подавляет генерацию предостережений указанного тип

Java Advanced / Новые возможности Java 5 Аннотация @SuppressWarnings Подавляет генерацию предостережений
при компиляции аннотированного элемента
Пример
@SuppressWarnings("unchecked")
public T toArray() {
return (T[]) list.toArray(new T[]);
}

Слайд 21

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

Аннотация @Deprecated

Помечает метод как deprecated
Пример
@Deprecated
public final

Java Advanced / Новые возможности Java 5 Аннотация @Deprecated Помечает метод как
void stop() {

}

Слайд 22

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

Аннотации во время выполнения

Интерфейс AnnotatedElement
Методы
isAnnotationPresent(Class) –

Java Advanced / Новые возможности Java 5 Аннотации во время выполнения Интерфейс
проверяет наличие аннотации данного типа
getAnnotation(Class) – возвращает аннотацию данного типа.
getAnnotations() – все аннотации
getDeclaredAnnotations() – непосредственно объявленные аннотации

Слайд 23

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

Пример: тестирование (1)

Аннотация
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test {

Java Advanced / Новые возможности Java 5 Пример: тестирование (1) Аннотация @Retention(RetentionPolicy.RUNTIME)
}
Пример использования
public class SimpleTest {
@Test public void testXXX();
@Test public void testYYY();
}

Слайд 24

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

Пример: тестирование (2)

Запуск тестов
for (Method

Java Advanced / Новые возможности Java 5 Пример: тестирование (2) Запуск тестов
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());
}
}
}

Слайд 25

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

APT и Mirror API

Annotation Processing Tool

Java Advanced / Новые возможности Java 5 APT и Mirror API Annotation
– позволяет работать с аннотациями до компиляции программы
Mirror API – позволяет работать с информацией о классах до их компиляции

Слайд 26

Другие возможности

Часть 3

Другие возможности Часть 3

Слайд 27

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

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

Методы с переменным числом

Java Advanced / Новые возможности Java 5 Переменное число аргументов Методы с
аргументов
method(args, Type … name) -- сигнатура
method – имя метода
args – список обычных аргументов
Type – тип дополнительных аргументов
name – имя формального параметра
Формальный параметр имеет тип Type[]

Слайд 28

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

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

Статические члены могут быть импортированы
import

Java Advanced / Новые возможности Java 5 Статические импорты Статические члены могут
static Math.PI;

angle = PI / 2
Статические метод может быть импортирован
import static Math.cos()

cos(angle)

Слайд 29

Заключение

Часть 4

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

Слайд 30

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

Ссылки (1)

New Java Language Fatures //

Java Advanced / Новые возможности Java 5 Ссылки (1) New Java Language
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

Слайд 31

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

Ссылки (2)

Interfaces (JLS) // http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html
Getting started

Java Advanced / Новые возможности Java 5 Ссылки (2) Interfaces (JLS) //
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