import java.lang.invoke.*;
class Main {
void foo() throws Exception {
MethodHandles.Lookup l = MethodHandles.lookup();
l.findVirtual(Test.class, "method1", MethodType.genericMethodType(2));
l.findVirtual(Test.class, "method1", MethodType.genericMethodType(2, false));
l.findVirtual(Test.class, "method1", MethodType.genericMethodType(2, true));
l.findVirtual(Test.class, "method1", MethodType.genericMethodType(1));
l.findVirtual(Test.class, "method1", MethodType.genericMethodType(3));
l.findVirtual(Test.class, "method2", MethodType.genericMethodType(2, true));
l.findVirtual(Test.class, "method2", MethodType.genericMethodType(2, false));
l.findVirtual(Test.class, "method2", MethodType.genericMethodType(1));
l.findVirtual(Test.class, "method2", MethodType.genericMethodType(1, true));
l.findVirtual(Test.class, "method2", MethodType.genericMethodType(2));
l.findVirtual(Test.class, "method2", MethodType.genericMethodType(3));
}
}
class Test {
public T method1(T a, T b) {return null;}
public T method2(T a, T b, T... c) {return null;}
}