Является ли рефлексия полезной помимо реверс-инжиниринга? - PullRequest
0 голосов
/ 04 ноября 2011

Языки, такие как Java и PHP, поддерживают отражение, которое позволяет объектам предоставлять метаданные о себе.Существуют ли какие-либо законные случаи использования, когда вам нужно было бы иметь возможность сделать что-то вроде запроса объекта, какими методами он обладает за пределами области обратного инжиниринга?Реализуются ли какие-либо из этих вариантов использования сегодня?

Ответы [ 4 ]

5 голосов
/ 04 ноября 2011

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

Так, например, любая полезная инфраструктура плагинов (OSGi, JSPF, JPF), использует отражение.Любая структура внедрения (Spring, Guice и т. Д.) Использует Reflection.

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

Тем не менее, это лучше оставить инфраструктуре и ее следует инкапсулировать.

1 голос
/ 04 ноября 2011

Конечно, есть хорошие варианты использования. Например, получение предоставленных разработчиком метаданных. Java API все чаще используют аннотации для предоставления информации о методах / полях / классах и их использовании. Как проверка входных данных, привязка к представлениям данных ... Вы можете использовать их во время компиляции, чтобы генерировать дескрипторы метаданных и использовать их, но чтобы сделать это во время выполнения, потребуется отражение. Даже если бы вы использовали дескрипторы метаданных, они в конечном итоге содержали бы такие вещи, как имена классов, методов и полей, к которым нужно было бы обращаться с помощью отражения.

Другой вариант использования: динамические языки. Взять Ruby ... Это позволяет вам заранее проверить, будет ли объект отвечать на имя метода, прежде чем пытаться вызвать этот метод. Нечто подобное требует отражения.

Или как насчет того, когда имя класса или метода должно быть предоставлено извне скомпилированного кода, как при выборе реализации некоторого API. Это будет просто текст. Поиск того, к чему он приводит, сводится к размышлению.

1 голос
/ 04 ноября 2011

Фреймворки, такие как Spring или Hibernate, широко используют рефлексию для проверки класса и просмотра аннотаций.

0 голосов
/ 04 ноября 2011

Фреймворки для отладки, сериализации, ведения журнала, тестирования ...

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