import java.lang.invoke.*;
class Main {
void foo() throws Exception {
MethodHandles.Lookup l = MethodHandles.lookup();
l.findVirtual(Test.class, "method", MethodType.methodType(void.class));
l.findVirtual(Test.class, "method", MethodType.methodType(int.class, int.class));
l.findVirtual(Test.class, "method", MethodType.methodType(boolean.class, short.class, char.class));
l.findVirtual(Test.class, "method", MethodType.methodType(int.class, int.class, int[].class));
l.findVirtual(Test.class, "method", MethodType.methodType(int.class, long.class, int[][].class));
l.findVirtual(Test.class, "method", MethodType.methodType(int.class, long.class, int[][][].class));
l.findVirtual(Test.class, "method", MethodType.methodType(Object.class, Object.class));
l.findVirtual(Test.class, "method", MethodType.methodType(Object.class, Object[].class));
l.findVirtual(Test.class, "method", MethodType.methodType(Object.class, Object[][].class));
l.findVirtual(Test.class, "method", MethodType.genericMethodType(1));
l.findVirtual(Test.class, "method", MethodType.methodType(void.class, void.class));
l.findVirtual(Test.class, "method", MethodType.methodType(void.class, int.class));
l.findVirtual(Test.class, "method", MethodType.methodType(short.class, char.class));
l.findVirtual(Test.class, "method", MethodType.methodType(int.class, int[].class));
l.findVirtual(Test.class, "method", MethodType.methodType(int.class, int[][].class));
l.findVirtual(Test.class, "method", MethodType.methodType(Object[].class, Object[].class));
l.findVirtual(Test.class, "method", MethodType.methodType(Object[][].class, Object[][].class));
l.findStatic(Test.class, "method", MethodType.methodType(void.class));
l.findVirtual(Test.class, "doesntExist", MethodType.methodType(void.class));
}
}
class Test {
public void method() {}
public int method(int n) {return n;}
public boolean method(short a, char b) {return true;}
public int method(int n, int... a) {return n;}
public int method(long n, int[]... a) {return a.length;}
public int method(long n, int[][][] a) {return a.length;}
public Object method(Object o) {return o;}
public Object method(Object[] o) {return o;}
public Object method(Object[][] o) {return o;}
}