Использование invokedynamic для реализации множественной диспетчеризации

Мне было интересно, можно ли использовать новую инструкцию байт-кода invokedynamicJava7 для реализации множественной отправкидля язык Java. Будет ли новый API в java.lang.invoke полезен для выполнения такой задачи?

Сценарий, о котором я думал, выглядел следующим образом. (Это похоже на случай применения шаблона проектирования посетителей, но могут быть причины, по которым это нежизнеспособный вариант.)

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?)

8
задан Matt 20 June 2012 в 11:20
поделиться