PRo*_*LeR 5 java reflection constructor
你有任何关于如何编写这种方法的线索吗?
public abstract class AbstractClass{}
public class TrialClass extends AbstractClass{
public TrialClass(final String a, final String b){}
public TrialClass(final String a, final String b, final String c){}
}
public class getNewInstance(final Class<? extends AbstractClass> clazz, Object... constructorParameters){
//???
}
TrialClass trialClass = getNewInstance(TrialClass.class, "A", "B");
Run Code Online (Sandbox Code Playgroud)
该Class方法包含一个getConstructor采用数组Class作为参数的方法,对应于构造函数参数。您必须从参数数组构建此数组。
像这样的东西:
public <T> T getNewInstance(final Class<T> clazz, Object... constructorParameters) throws InstantiationException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException{
Class[] parameterTypes = new Class[constructorParameters.length];
for(int i = 0; i < constructorParameters.length; i++) {
parameterTypes[i] = constructorParameters[i].getClass();
}
Constructor<T> constructor = clazz.getConstructor(parameterTypes);
return constructor.newInstance(constructorParameters);
}
Run Code Online (Sandbox Code Playgroud)
编辑:正如 Codebender 所说,当子类型作为参数传递时,这不起作用。