実行時にメソッドをリンクするためのinvokedynamic
命令をサポートするJVM 7の上に動的に型指定された言語を実装すると仮定します。JDK7のinvokedynamicで多態性を実現する方法
動的に型指定された言語には、整数を加算して文字列を連結して整数に作用する関数add
があります。ここで、add
は、(コンパイル時に)オブジェクト、整数または文字列、またはその両方を保持することしか知っていない、一般的なリスト処理メソッドによって呼び出されるとします。
invokedynamic
は、メソッドをJVMバイトコードにコンパイルするときに、2つの異なる内部関数、つまり整数を追加する実際の関数と文字列を連結する実際の関数にディスパッチする必要があるので、ここで助けますか?
私はあなたが私に言っていることを理解していると思います。これは、私の動的コールサイトが(引数の型に応じて)適切な加算器を検索して呼び出す一般的なメソッドハンドルを返さなければならないことを意味します。 – Marc
それがあなたが行きたいと思う方法なら、それは正しいと思います。 'invokedynamic'にオブジェクトとメソッドシグネチャを与えると、そのオブジェクトのメソッドを呼び出します。 'invokedynamic'の前に適切なシグネチャを調べるためにあなた自身の検索をしたいのであれば、それを確かに行うことができます。 –