Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Интроспекция и рефлексия


Автор: serious 16.11.2006, 15:41
Объясните пожалуйста на пальцах, что это такое. Точнее, я немного представляю, что такое интроспекция, но для чего она используется, мне не совсем понятно.

Автор: LSD 16.11.2006, 15:58
Да много для чего. Например она используется IDE для того чтобы работать с любыми JavaBeads компонентами. С ее помощью можно работать с классами, о которых ничего не было известно на момент компиляции. Например мы можем в файл настроек записать имя класса и имена propertys которые надо установить, а затем в рантайме это сделать и получить уже сконфигурированный объект.

Автор: batigoal 17.11.2006, 11:45
1) Можно использовать рефлексию для разработки плагинов. Т.е. подкинул программе jar - и она разобралась, что в нем есть. Хотя, конечно, лучше это делать с помощью интерфейсов\конфигурационных файлов.
2) Хороший пример использования рефлексии - JDBC. Реальный драйвер базы подхватывается уже в рантайме.

Автор: serious 17.11.2006, 13:22
А чем они отличаются, никак не могу понять... Рефлексия - это, как я понял, динамическое определение свойств и методов класса?

Автор: batigoal 17.11.2006, 13:29
Как я понимаю, это очень близкие понятия. Интроспекция базируется на рефлексии. Reflection - это механизм, API, с помощью которого можно получить информацию о классах и интерфейсах. В рамках JavaBeans то же самое называется интроспекцией, причем реализована она с помощью того самого java.lang.reflect.

Автор: serious 17.11.2006, 15:29
Если это фактически одно и то же, зачем вводить путаницу? Или есть все-таки какое-то неуловимое отличие?  smile

Автор: tux 17.11.2006, 15:38
Цитата

Reflection (the java.lang.reflect package) is primarily for very generic programs such as database browsers or visual code editors. Reflection allows Java code to discover information about the fields, methods and constructors of loaded classes and to dynamically invoke them. Reflection is for dealing with class files you know very little about ahead of time. It would be of interest for example to the author of a BeanBox editor to import various foreign beans.

Цитата

Introspection - studying a Javabean with reflection to discover its properties.

По-моему, разница очевидна. Reflection - возможность получить метаданные класса, introspection - получение информации об атрибутах с использование reflection, причем только для javabean.

Цитаты отсюда - http://mindprod.com/index.html.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)