java.lang.invoke


1. Dynamic Method Invocation:

CallSite site = LambdaMetafactory.metafactory(
    java.lang.invoke.MethodHandles.lookup(),
    "hello",
    MethodType.methodType(void.class, String.class),
    LambdaMetafactory.FLAG_PUBLIC | LambdaMetafactory.FLAG_FINAL,
    MethodType.methodType(String.class),
    "sayHello"
);
site.dynamicInvoker().invoke("John"); // Prints "Hello John!"

2. Customizing Method Invocation Logic:

MethodHandle mh = MethodHandles.lookup().findVirtual(
    String.class, "toUpperCase", MethodType.methodType(String.class)
);
MethodHandle mhCustom = MethodHandles.filterArguments(
    mh, 0, String.class, String::toUpperCase
);
System.out.println(mhCustom.invoke("hello")); // Prints "HELLO"

3. Partial Application (Currying):

4. Method Linking:

5. Auto-Unboxing:

6. Variable-Arity Method Invocation (InvokeDynamic):

7. Exception Handling with Method Handles:

8. Customizing Java Bean Access:

9. High-Performance Memory Access:

10. Reflective Operations:

11. Method Reflection:

12. Dynamic Method Lookup:

13. Class Casting:

14. Array Element Access: