With the release of Java 7 came the MethodHandle
, which allows a user to invoke a method as if using its underlying bytecode. In particular, the MethodHandles.Lookup
class provides factory methods to create method handles to access class members:
The factory methods on a Lookup object correspond to all major use cases for methods, constructors, and fields. Each method handle created by a factory method is the functional equivalent of a particular bytecode behavior.
Functionally, this is more or less equivalent to using reflection to access these same class members, yet method handles are faster than reflection.
So, is there any reason to still use reflection functionalities like Field#get(..)
/Method.invoke(..)
or are these methods effectively obsolete with the introduction of the faster method handles?
Note that while method handles were introduced in Java 7, my question primarily pertains to Java 8, in which they were optimized to supposedly reach performance approximately equal to direct field/method calls, surpassing reflection's ability.