我的测试框架中有一个方法,可以根据传入的参数创建类的实例:
public void test(Object... constructorArgs) throws Exception {
Constructor<T> con;
if (constructorArgs.length > 0) {
Class<?>[] parameterTypes = new Class<?>[constructorArgs.length];
for (int i = 0; i < constructorArgs.length; i++) {
parameterTypes[i] = constructorArgs[i].getClass();
}
con = clazz.getConstructor(parameterTypes);
} else {
con = clazz.getConstructor();
}
}
问题是,如果构造函数具有基本类型,则这不起作用,如下所示:
public Range(String name, int lowerBound, int upperBound) { ... }
.test("a", 1, 3);
结果是:
java.lang.NoSuchMethodException: Range.<init>(java.lang.String, java.lang.Integer, java.lang.Integer)
原始整数会自动装箱到对象版本中,但如何取回它们以调用构造函数?
Use Integer.TYPE
代替Integer.class
.
根据Javadocs http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#TYPE,这是“代表原始类型的类实例int
."
您还可以使用int.class
。这是一个捷径Integer.TYPE
。不仅是类,甚至对于原始类型,你都可以说type.class
在爪哇。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)