Java 7 のリリースに伴い、MethodHandle
ユーザーはメソッドを基になるバイトコードを使用しているかのように呼び出すことができます。特に、このMethodHandles.Lookup
クラスは、クラス メンバーにアクセスするためのメソッド ハンドルを作成するファクトリ メソッドを提供します。
Lookup オブジェクトのファクトリ メソッドは、メソッド、コンストラクタ、およびフィールドのすべての主要なユース ケースに対応しています。ファクトリ メソッドによって作成された各メソッド ハンドルは、特定のバイトコード動作と機能的に同等です。
機能的には、これはリフレクションを使用してこれらの同じクラス メンバーにアクセスするのとほぼ同等ですが、メソッド ハンドルはリフレクションよりも高速です。
それで、まだリフレクション機能を使用する理由はありますかField#get(..)
/Method.invoke(..)
またはこれらのメソッドは、より高速なメソッドハンドルの導入により事実上廃止されていますか?
メソッドハンドルは Java 7 で導入されましたが、私の質問は主に Java 8 に関するものであることに注意してください。Java 8 では、直接フィールド/メソッド呼び出しとほぼ同等のパフォーマンスに達するように最適化されており、リフレクションの能力を上回っています。