JDK7のInvokedynamicで、どのように多型を達成できますか
-
26-10-2019 - |
質問
JVM 7の上に動的に型付けされた言語を実装していると仮定します。 invokedynamic
実行時にメソッドをリンクする指示。
動的に型付けされた言語には関数があります add
それは、それらを追加することによって整数とそれらを連結することによって文字列に機能します。今それを想定してください add
たとえば、(コンパイル時に)オブジェクト、整数または文字列のいずれかを保持していることを知っている一般的なリスト処理方法などによって呼び出されます。
どのようにすることができます invokedynamic
2つの異なる内部関数、つまり整数を追加する実際の関数と文字列を連結する実際の関数にディスパッチする必要があるため、JVMバイトコードにメソッドをコンパイルするときに私を助けてください。
解決
要するに、 invokedynamic
メソッドが属するクラスの知識なしに、特定の署名を使用してメソッドを呼び出すことができます。もしあなたの add()
メソッドはただかかります Object
(または他の一般的なベースタイプ)引数として、あなたは持っていることができます add(Object)
多くの場合、関係のない多くのクラスの方法、および invokedynamic
それらを呼び出すことができます。ターゲットオブジェクトにメソッドがある限り、呼び出されます。
他のヒント
これらの関連記事も見ることができます。
私の研究の間に、私は次のリンクも見つけました。
これは、JSR 292を使用して動的な言語のランタイムで見つけることができる通常のパターンを実装する方法を示すソースコードのコレクションです。 (説明はページからコピーされました。)
所属していません StackOverflow