Zastanawiam się, czy nowa instrukcja JavaTM invokedynamic
bytecode może być użyta do implementacji multiple dispatch dla języka Java. Czy nowy interfejs API pod java.lang.invoke byłby przydatny do wykonywania takich zadań?Użyj invokedynamic do wdrożenia wielu wysyłek
Scenariusz, o którym myślałem, wyglądał następująco. (To wygląda na razie aplikacja do projektowania odwiedzający, ale nie mogą być przyczyny, że to nie jest realną opcją.)
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);
}
}
Klasa biblioteka MultipleDispatch
by następnie zrobić coś w rodzaju:
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.
}
}
(jestem świadomy MultiJava, ale można to osiągnąć w Java czystej mody?)
Warto może patrząc na MethodHandles w Java 7, ponieważ mogą one korzystać z dynamicznych wysyłki. –
Ładne pytanie (+1). Czy w twoim pierwszym zdaniu brakuje słowa (świeżo dodane co, CallSite?)? – DaveFar
Dziwne, że to pytanie tak mało uwagi :( – DaveFar