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) {} } }