0

MethodHandle クラスに関する 2 つの質問:

  1. invokeExact() へのすべての呼び出しで戻り値の型キャストが必要であるというのは本当ですか (void または Object を返すターゲット メソッドを除く) ?

  2. MethodHandle は、レシーバーに 1 回しかバインドできないようです。任意の MethodHandle インスタンスが与えられた場合、それが既にバインドされているかどうか、もしそうならどの型にバインドされているかを判断する方法はありますか?

public static void main(String[] args) throws Throwable {
    MethodHandles.Lookup lookup = MethodHandles.publicLookup();
    MethodHandle handle = lookup.bind(new Object(), "toString", MethodType.methodType(String.class));

    String s = (String) handle.invokeExact();
    System.out.println(s);

    try {
        handle.invokeExact();
    }
    catch (WrongMethodTypeException e) {
        System.out.println(e);
    }

    try {
        handle.bindTo(new Object());
    }
    catch (IllegalArgumentException e) {
        System.out.println(e);
    }
}
4

1 に答える 1