Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
56_Java.pdf
Скачиваний:
210
Добавлен:
18.02.2016
Размер:
2.39 Mб
Скачать

Скачано с сайта http://ivc.clan.su

Понятие отражения (рефлексии)

Отражение, или рефлексия, в контексте разработки программного обеспечения на Java — это способность программ к самоанализу, к динамическому (т.е. на этапе выполнения) исследованию классов, неизвестных и недоступных на этапе компиляции.

Отражение в Java обеспечивается набором так называемых метаклассов, содержащихся в пакете java.lang.reflect, за исключением классов java.lang.Class, java.lang.Package из пакета java.lang.

Механизм отражения позволяет не только динамически получать информацию о классе, недоступном во время компиляции программы, но и создавать объекты-экземпляры класса, вызывать методы, работать с полями.

Таким образом, можно создавать код, который выполняет те же действия, что и код, написанный

непосредственно. Используя имя определенного класса (отсутствующего в момент написания и компиляции программы), можно получить соответствующий объект типа Class, использовать его для создания экземпляров этого класса, а затем работать с ними так, как если бы они были созданы с помощью оператора new, т.е. можно работать с объектами-отражениями.

Механизм отражения предназначен для использования, главным образом, не прикладными программистами, а разработчиками инструментальных средств, в частности сред визуального проектирования.

Компоновщики (визуальные среды) используют Reflection API для загрузки новых Beanкомпонентов, их исследования и предоставления разработчику приложения информации о свойствах, методах и событиях для последующей настройки и связывания компонентов.

Отражение в Java поддерживает не только технологию JavaBeans, но и сериализацию объектов и технологию RMI.

Класс java.lang.Class

Данный метакласс является основой механизма отражения. Он символизирует (представляет) класс в языке Java.

Возможности, предоставляемые данным классом:

Загрузка класса по имени на этапе выполнения программы и получение объекта типа Class для требуемого класса.

Простая версия статического метода forName:

public static Class forName (String name) throws ClassNotFoundException

(Предполагается использование загрузчика класса типа ClassLoader, принятого по умолчанию.)

Создание экземпляра класса: public Object newlnstance()

throws InstantiationException, IllegalAccessException

Метод newlnstance ориентируется на использование конструктора без параметров!

Получение информации о:

реализуемых интерфейсах, суперклассе, модификаторах класса;

членах класса (полях, конструкторах, методах, внутренних классах).

При этом методы класса Class позволяют получить информацию о членах класса как объявленных (declared) внутри класса, так и обо всех (в том числе унаследованных).

Классы пакета java.lang.reflect

Наиболее значимые классы:

Constructor, Field, Method, Array, Modifier.

46

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]