Java7の新しいバイトコード命令を使用して、Java言語の多重ディスパッチinvokedynamic
を実装できるかどうか疑問に思いました。java.lang.invokeの下の新しいAPIは、そのようなことを実行するのに役立ちますか?
私が考えていたシナリオは次のようになりました。(これはビジターデザインパターンのアプリケーションケースのように見えますが、これが実行可能なオプションではない理由があるかもしれません。)
class A {}
class A1 extends A {}
class A2 extends A {}
class SomeHandler {
private void doHandle(A1 a1) { ... }
private void doHandle(A2 a2) { ... }
private void doHandle(A a) { ... }
public void handle(A a) {
MultipleDispatch.call(this, "doHandle", a);
}
}
次に、ライブラリクラスMultipleDispatch
は次のようなことを行います。
class MultipleDispatch {
public static Object call(Object receiver, String method, Object...arg) {
// something like that in byte code
#invokeDynamic "doHandle" "someBootstrap"
}
static CallSite someBootstrap {
// resolve that dynamic method call.
}
}
(私はMultiJavaを知っていますが、これはJavaの純粋な方法で実現できますか?)