Нужно испачкать руки при отражении - PullRequest
4 голосов
/ 23 апреля 2010

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

Спасибо.

Ответы [ 4 ]

2 голосов
/ 23 апреля 2010

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

Вот краткий обзор в java:

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

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

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

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

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

2 голосов
/ 23 апреля 2010

В первую очередь используется для доступа к классам / методам / полям программно (т.е. во время выполнения вместо времени компиляции).Хорошие API реального мира, которые интенсивно используют рефлексию, похожи на ORM как Hibernate / JPA .

Здесь вы можете найти Sun учебник по теме (нажмите Далее ссылку внизу, чтобы разбить ее на страницы).

0 голосов
/ 09 декабря 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...