С выпуском Java 7 появился MethodHandle
, который позволяет пользователю вызывать метод, как если бы он использовал свой базовый байт-код. В частности, класс MethodHandles.Lookup
предоставляет методы factory для создания меток для доступа к членам класса:
Методы factory объекта Lookup соответствуют всем основным вариантам использования для методов, конструкторов и полей. Каждый дескриптор метода, созданный с помощью метода factory, является функциональным эквивалентом поведения конкретного байт-кода.
Функционально это более или менее эквивалентно использованию отражения для доступа к этим же членам класса, но обработчики методов быстрее, чем отражение.
Итак, есть ли причина по-прежнему использовать функции отражения, такие как Field#get(..)
/Method.invoke(..)
или эти методы эффективно устарели с введением более быстрых методов?
Обратите внимание, что, хотя дескрипторы методов были введены в Java 7, мой вопрос в первую очередь относится к Java 8, в котором они были оптимизированы, чтобы предположительно достичь производительности, приблизительно равной прямым вызовам полей/методов, превосходя способность отражения.