Me pregunté si la nueva instrucción de bytecode invokedynamic
de Java7 se podría usar para implementar multiple dispatch para el lenguaje Java. ¿La nueva API en java.lang.invoke sería útil para realizar tal cosa?Use invookedynamic para implementar despacho múltiple
El escenario en el que estaba pensando se veía de la siguiente manera. (Esto se ve como un caso de aplicación para el patrón de diseño visitante, pero puede haber razones por las que esto no es una opción viable.)
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);
}
}
La biblioteca de clases MultipleDispatch
entonces hacer algo por el estilo:
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.
}
}
(soy consciente de MultiJava, pero es posible lograrlo de una manera Java pura?)
Puede ser digno de mirar MethodHandles en Java 7, ya que pueden usar envío dinámico. –
Buena pregunta (+1). ¿Falta una palabra en su primera oración (recién agregado, CallSite?)? – DaveFar
Es extraño que esta pregunta tenga tan poca atención :( – DaveFar