import java.lang.invoke.*;
class Main {
void foo() throws Exception {
MethodHandles.Lookup l = MethodHandles.lookup();
Class c = Test.class;
l.findConstructor(Test.class, MethodType.methodType(void.class));
l.findConstructor(Test.class, MethodType.methodType(void.class, int.class));
l.findConstructor(Test.class, MethodType.methodType(void.class, int.class, String.class));
l.findConstructor(Test.class, MethodType.methodType(void.class, int.class, String[].class));
l.findConstructor(Test.class, MethodType.methodType(void.class, String[][].class));
l.findConstructor((c), MethodType.methodType(void.class));
l.findConstructor(Test.class, MethodType.methodType(int.class));
l.findConstructor(Test.class, MethodType.methodType(Test.class));
l.findConstructor(Test.class, MethodType.methodType(Test.class, int.class));
l.findConstructor(Test.class, MethodType.methodType(void.class, String.class));
l.findConstructor(Test.class, MethodType.methodType(void.class, int.class, String[][].class));
l.findConstructor(Test.class, MethodType.methodType(void.class, String[].class));
l.findConstructor(WithDefault.class, MethodType.methodType(void.class));
l.findConstructor(Class.forName("WithDefault"), MethodType.methodType(void.class));
l.findConstructor(NoDefault.class, MethodType.methodType(void.class));
l.findConstructor(Class.forName("NoDefault"), MethodType.methodType(void.class));
}
}
class Test {
public Test() {}
public Test(int a) {}
public Test(int a, String b) {}
public Test(int a, String... b) {}
public Test(String[]... b) {}
}
class WithDefault {
}
class NoDefault {
public NoDefault(int n) {}
}