I wondered if Java7's new invokedynamic
bytecode instruction could be used to implement multiple dispatch for the Java language. Would the new API under java.lang.invoke be helpful to perform such a thing?
The scenario I was thinking about looked as follows. (This looks like an application case for the visitor design pattern, but there may be reasons that this is not a viable option.)
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);
}
}
The library class MultipleDispatch
would then do something of the kind:
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.
}
}
(I am aware of MultiJava, but can this be achieved in a Java-pure fashion?)