Разделы презентаций


Рефлексия и Аннотации

Содержание

План занятияРефлексияОпределениеУчастники механизма рефлексииПолучение и использование информации о классеАннотацииОпределениеСинтаксисСтандартные аннотацииВарианты использования

Слайды и текст этой презентации

Слайд 1Рефлексия и Аннотации

Рефлексия и Аннотации

Слайд 2План занятия
Рефлексия
Определение
Участники механизма рефлексии
Получение и использование информации о классе
Аннотации
Определение
Синтаксис
Стандартные аннотации
Варианты

использования

План занятияРефлексияОпределениеУчастники механизма рефлексииПолучение и использование информации о классеАннотацииОпределениеСинтаксисСтандартные аннотацииВарианты использования

Слайд 3Рефлексия

Рефлексия

Слайд 4Рефлексия. Определение
Рефлексия (от лат. reflexio - обращение назад) - механизм

исследования данных о программе во время её выполнения.

Позволяет исследовать

информацию о классах и выполнять операции над полями и методами используемых классов.

Java Reflection API – набор классов из пакетов
java.lang и java.lang.reflect
Рефлексия. ОпределениеРефлексия (от лат. reflexio - обращение назад) - механизм исследования данных о программе во время её

Слайд 5Рефлексия. Участники механизма рефлексии
Классы пакета java.lang
Class
Класс является метаклассом по отношению

к другим типам
Экземпляры класса Class описывают классы и интерфейсы выполняемого

приложения
Методы класса Class позволяют исследовать содержимое описываемого класса и его свойства

ClassLoader
Реализует механизмы загрузки классов
Рефлексия. Участники механизма рефлексииКлассы пакета java.langClassКласс является метаклассом по отношению к другим типамЭкземпляры класса Class описывают классы

Слайд 6Рефлексия. Участники механизма рефлексии
Классы пакета java.lang.reflect
Field
Описывает поле объекта
Method
Описывает метод объекта
Constructor
Описывает

конструктор объекта
Modifier
Инкапсулирует работу с модификаторами
Array
Инкапсулирует работу с массивами

Рефлексия. Участники механизма рефлексииКлассы пакета java.lang.reflectFieldОписывает поле объектаMethodОписывает метод объектаConstructorОписывает конструктор объектаModifierИнкапсулирует работу с модификаторамиArrayИнкапсулирует работу с

Слайд 7Рефлексия. Использование информации о классе
Получение объекта типа Class
MyClass a =

new MyClass();
Class c = a.getClass();

Class c = MyClass.class;

Class

c = Class.forName("com.reflect.MyClass");

Получение имени класса

String name = c.getName(); //com.reflect.MyClass

String name = c.getSimpleName(); //MyClass
Рефлексия. Использование информации о классеПолучение объекта типа ClassMyClass a = new MyClass(); Class c = a.getClass(); Class

Слайд 8Рефлексия. Использование информации о классе
Исследование модификаторов класса

Class c = obj.getClass();


int modifiers = c.getModifiers();
if (Modifier.isPublic(modifiers)) {
System.out.println("public");


}
if (Modifier.isAbstract(modifiers)) {
System.out.println("abstract");
}
if (Modifier.isFinal(modifiers)) {
System.out.println("final");
}

Всего 12 Методов
Рефлексия. Использование информации о классеИсследование модификаторов классаClass c = obj.getClass(); int modifiers = c.getModifiers(); if (Modifier.isPublic(modifiers)) {

Слайд 9Рефлексия. Использование информации о классе
Исследование полей класса
Class c = obj.getClass();


Field[] publicFields = c.getFields();
for (Field field : publicFields) {


Class fieldType = field.getType();
System.out.println("Имя: " + field.getName());
}

Получение и изменение значения поля
Class c = obj.getClass();
Field field = c.getField(“myField");
String myFieldValue = (String) field.get(obj);
field.set(obj, "New value");

Рефлексия. Использование информации о классеИсследование полей классаClass c = obj.getClass(); Field[] publicFields = c.getFields(); for (Field field

Слайд 10Рефлексия. Использование информации о классе
Исследование информации о методе
Class c =

obj.getClass();
Method[] methods = c.getMethods();
for (Method method : methods)

{
... method.getName();
... method.getReturnType();
for (Class paramType : method.getParameterTypes()) {
... paramType.getName();
}
}
Вызов метода
Class c = obj.getClass();
Class[] paramTypes = new Class[] {String.class};
Method method = c.getMethod(“getCalcValue", paramTypes);
Object[] args = new Object[]{new String(“Hello")};
Double d = (Double) method.invoke(obj, args);
Рефлексия. Использование информации о классеИсследование информации о методеClass c = obj.getClass(); Method[] methods = c.getMethods(); for (Method

Слайд 11Рефлексия. Использование информации о классе

Создание экземпляра класса

Class c = Class.forName("com.reflect.MyClass");



Object obj = c.newInstance();

MyClass a = (MyClass) obj;

Рефлексия. Использование информации о классеСоздание экземпляра классаClass c = Class.forName(

Слайд 12Аннотации

Аннотации

Слайд 13Аннотации. Определение

Аннотация – дескриптор, включаемый в текст программы, и используются

для хранения метаданных, необходимых на разных этапах жизненного цикла программы.

Аннотации. ОпределениеАннотация – дескриптор, включаемый в текст программы, и используются для хранения метаданных, необходимых на разных этапах

Слайд 14Аннотации. Синтаксис
Объявление аннотации:

аннотации
модификаторы @interface ИмяАннотации {
объявление_элемента_1
объявление_элемента_2

. . .
}

Объявление элемента:

тип имяЭлемента() default значение;

Аннотации. СинтаксисОбъявление аннотации:аннотациимодификаторы @interface ИмяАннотации {  объявление_элемента_1  объявление_элемента_2  . . .}Объявление элемента:тип имяЭлемента() default

Слайд 15Аннотации. Синтаксис

Допустимые типы элементов:

1. Простой тип
(int, short, long, byte, char,

double, float, boolean)
2. String
3. Class
4. Enum
5. Аннотация
6. Массив из приведенных выше типов

Аннотации. СинтаксисДопустимые типы элементов:1.	Простой тип 	(int, short, long, byte, char, double, float, boolean)2.	String3.	Class4.	Enum5.	Аннотация6.	Массив из приведенных выше типов

Слайд 16Аннотации. Синтаксис

Пометить аннотацией можно:

1. Пакет
2. Класс (включая Enum)
3. Интерфейс
4. Интерфейс аннотации
5. Метод
6. Конструктор
7. Поля класса
8. Параметры
9. Локальные переменные

Аннотации. СинтаксисПометить аннотацией можно:1.	Пакет2.	Класс (включая Enum)3.	Интерфейс4.	Интерфейс аннотации5.	Метод6.	Конструктор7.	Поля класса8.	Параметры9.	Локальные переменные

Слайд 17Аннотации. Синтаксис

Пример:

import java.lang.annotation.*;

@Target(value=ElementType.FIELD)
@Retention(value= RetentionPolicy.RUNTIME)
public @interface Name {
String

name();
String type() default “string”;
}

Аннотации. СинтаксисПример:import java.lang.annotation.*;@Target(value=ElementType.FIELD)@Retention(value= RetentionPolicy.RUNTIME)public @interface Name {   String name();   String type() default “string”;}

Слайд 18Аннотации. Синтаксис

Варианты записи

@Tested(name=”Alex”, date=”20.10.2010”)

Аннотацию, которая имеет только один элемент value,

можно в следующей форме:
@Color(ColorType.RED)

Если аннотация не имеет элементов, она называется

аннотацией-маркером и записывается так:
@Documented
Аннотации. СинтаксисВарианты записи@Tested(name=”Alex”, date=”20.10.2010”)Аннотацию, которая имеет только один элемент value, можно в следующей форме:@Color(ColorType.RED)Если аннотация не имеет

Слайд 19Аннотации. Стандартные аннотации
Аннотации для аннотаций

@Retention (SOURCE, CLASS, RUNTIME)
Указывает жизненный цикл

аннотации.
@Target (Type, Field, Method, Parameter, Constructor, Local Variable, Annotation

Type, Package)
Указывает объекты, которые могут быть помечены аннотацией.
@Documented
Маркер-аннотация. Указывает, что аннотация должна быть добавлена в javadoc
@Inherited
Маркер-аннотация. Помечает аннотацию, которая будет унаследована потомком класса, отмеченного такой аннотацией
Аннотации. Стандартные аннотацииАннотации для аннотаций@Retention (SOURCE, CLASS, RUNTIME)Указывает жизненный цикл аннотации. @Target (Type, Field, Method, Parameter, Constructor,

Слайд 20Аннотации. Стандартные аннотации
Другие стандартные аннотации

@Deprecated
Отмечает, что метод устарел

@SuppressWarnings(String[])
Указывает компилятору подавить

предупреждения компиляции, определенные в параметрах аннотации

@Override
Проверяет, переопределен ли метод

Аннотации. Стандартные аннотацииДругие стандартные аннотации@DeprecatedОтмечает, что метод устарел@SuppressWarnings(String[])Указывает компилятору подавить предупреждения компиляции, определенные в параметрах аннотации@OverrideПроверяет, переопределен

Слайд 21Аннотации. Варианты использования
• Маппинг данных
Может выполняться на этапе компиляции или

во время исполнения программы
• Альтернатива (замена или расширение) интерфейсов исполняемых файлов

(Runnable, Test)
• AOP: Транзакции, права доступа, логирование, обработка исключений, проверка пре- и пост-условий
См. библиотеки для AOP, например AspectJ
• Валидация данных @Validation(@Required, @CammelCase, @Regex(“[a-z]*”))
• Расширение комментариев, форматирование кода в IDE, статический анализ кода: @NotImplelented, @Bug(91355846578574587),

Аннотации. Варианты использования•	Маппинг данных Может выполняться на этапе компиляции или во время исполнения программы•	Альтернатива (замена или расширение)

Слайд 22Рекомендуемая литература

“Core Java 2, Volume II – Advanced Features” –

Horstmann, Cornell

http://docs.oracle.com

http://habrahabr.ru

http://quizful.net

Рекомендуемая литература“Core Java 2, Volume II – Advanced Features” – Horstmann, Cornellhttp://docs.oracle.comhttp://habrahabr.ruhttp://quizful.net

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика