import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;

public class ContohMethodHandle {
    static int tambah(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) throws Throwable {
        MethodHandles.Lookup lookup = MethodHandles.lookup();
        MethodType tipe = MethodType.methodType(int.class, int.class, int.class);
        MethodHandle tambah = lookup.findStatic(ContohMethodHandle.class, "tambah", tipe);

        int pasti = (int) tambah.invokeExact(2, 3);
        System.out.println("invokeExact : " + pasti);

        Object luwes = tambah.invoke(2, 3);
        System.out.println("invoke      : " + luwes);
    }
}
