如何通过传递Object []而不是带反射的参数列表来创建类的新实例

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)

Wil*_*lQu 2

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 所说,当子类型作为参数传递时,这不起作用。