import java.lang.reflect.Method;
import java.lang.reflect.Constructor;
class ConstructorParamCount {
void varargSignature() throws Exception {
Class> cls = Test.class;
Constructor c1 = cls.getConstructor(int.class);
Constructor c2 = cls.getConstructor(int.class, String.class);
Constructor c3 = cls.getConstructor(int.class, String.class, String.class);
c1.newInstance(42, "abc");
c2.newInstance(42, "abc");
c3.newInstance(42, "abc");
c1.newInstance(new Object[]{42, "abc"});
c2.newInstance(new Object[]{42, "abc"});
c3.newInstance(new Object[]{42, "abc"});
c1.newInstance();
c2.newInstance();
c3.newInstance();
cls.getConstructor(String.class).newInstance(new String[] {"abc"});
}
void arraySignatutre() throws Exception {
Class> cls = Test.class;
Constructor c1 = cls.getConstructor(new Class[]{int.class});
Constructor c2 = cls.getConstructor(new Class[]{int.class, String.class});
Constructor c3 = cls.getConstructor(new Class[]{int.class, String.class, String.class});
c1.newInstance(42, "abc");
c2.newInstance(42, "abc");
c3.newInstance(42, "abc");
c1.newInstance(new Object[]{42, "abc"});
c2.newInstance(new Object[]{42, "abc"});
c3.newInstance(new Object[]{42, "abc"});
c1.newInstance();
c2.newInstance();
c3.newInstance();
cls.getConstructor(new Class[]{String.class}).newInstance(new String[] {"abc"});
}
void manyArguments() throws Exception {
Class> cls = M.class;
Constructor m0 = cls.getConstructor();
Constructor m1 = cls.getConstructor(int.class);
Constructor m2 = cls.getConstructor(int.class, short.class);
Constructor m3 = cls.getConstructor(int.class, short.class, long.class);
Constructor m4 = cls.getConstructor(int.class, short.class, long.class, float.class);
Constructor m5 = cls.getConstructor(int.class, short.class, long.class, float.class, double.class);
m0.newInstance(0, 0);
m1.newInstance("abc");
m2.newInstance(0, "abc");
m3.newInstance(0, 0, "abc");
m4.newInstance(0, 0, 0, "abc");
m5.newInstance(0, 0, 0, 0, "abc");
Constructor m = cls.getConstructor(new Class[0]);
m.newInstance(new Object[0]);
m.newInstance(new Object[]{});
m.newInstance(new Object[] {"abc"});
m = cls.getConstructor(new Class[]{});
m.newInstance(new Object[]{});
}
class Test {
public Test(int n) {}
public Test(int n, String s) {}
public Test(int n, String s, String t) {}
public Test(String s) {}
}
class M{
public M() {}
public M(int a1) {}
public M(int a1, short a2) {}
public M(int a1, short a2, long a3) {}
public M(int a1, short a2, long a3, float a4) {}
public M(int a1, short a2, long a3, float a4, double a5) {}
}
}