【发布时间】:2012-06-16 09:54:45
【问题描述】:
我想知道是否可以使用 Java7 的新 invokedynamic 字节码指令来实现 Java 语言的 multiple dispatch。 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 的方式实现吗?)
【问题讨论】:
-
Java 7 中的 MethodHandles 可能值得一看,因为它们可以使用动态调度。
-
好问题(+1)。您的第一句话中是否缺少一个单词(新添加了什么,CallSite?)?
-
奇怪的是这个问题很少受到关注:(
-
我应该开始赏金吗?
标签: java dynamic overloading dispatch multiple-dispatch