2010-04-23 2 views
4

Я читал о Java Reflections, но до сих пор это было смутное понятие для меня. Может ли кто-нибудь дать краткие сведения с кратким примером того, как использовать отражения в Java?Необходимо, чтобы мои руки были загрязнены отражением

Спасибо.

+3

http://java.sun.com/docs/books/tutorial/reflect/index.html? –

+0

+1 для ссылки. Учебное пособие очень само собой разумеется. – Cambium

+1

@Bragaadeesh: вот один из примеров вопроса, который я задал, где решение состоит в использовании крошечного фрагмента отражения, чтобы определить, существует ли метод или нет: http://stackoverflow.com/questions/2448614/java-easiest- путь к пакету-как-ява-1-5-и-1-6-код – SyntaxT3rr0r

ответ

2

Я прочитал о Java Reflections но до настоящего времени это было расплывчатое понятие мне.

Вот быстрый в рефлексии в Java:

Структурная самоанализ. Основное отражение касается интроспекции объекта во время выполнения. Это означает, что вы можете изучать структуру объектов и классов во время выполнения программно, например. получить класс объекта, перечислить методы класса, перечислить поля, определенные в классе, и т. д.

Отражающий вызов и его реализация. С отражением вы можете вызывать метод во время выполнения, который не определен во время компиляции, например. invoke метод с именем M на объекте O, где M считывается в файле конфигурации. Вы также можете создавать объекты динамически, не зная класса во время компиляции.

Аннотации. Затем вы можете переместиться на один уровень вверх в мета-уровни и играть с аннотациями. Annotations describe other elements, такие как класс, метод и поля. Многие основы полагаются на это.

Динамический прокси. Dynamic proxy может быть сгенерирован во время выполнения. В этом случае это действительно так, если вы динамически создаете класс во время выполнения. Использовать с осторожностью, но в некоторых случаях очень удобно и мощно.

Я думаю, вы начнете со структурной самоанализа. В других ответах есть ссылки на учебные пособия, но я надеюсь, что это даст вам обзор того, что еще можно сделать.

2

Это прежде всего используется для доступа к классам/методам/полям программно (т. Е. Во время выполнения вместо компиляции). Хороший API реального мира, который интенсивно использует отражение, - это ORM, как Hibernate/JPA.

Здесь вы можете найти Sun tutorial on the subject (нажмите Вперед ссылку внизу, чтобы развернуть его).

0

Нечто, о котором стоит упомянуть, равно Javassist. Он не только обладает отражающими способностями, но также позволяет управлять байт-кодами во время выполнения с использованием обычного синтаксиса источника! Как только вы углубились в размышления немного (что вы, вероятно, уже сейчас), вы по-настоящему оцените его красоту.

Смежные вопросы