Class.newInstance()正是你所需要的:
public static <T> T forgeClass(Class<T> classReference) throws InstantiationException, IllegalAccessException {
return classReference.newInstance();
}
如果你想傳遞參數給你必須使用java.lang.reflect.Constructor<T>
構造:
public static <T> T forgeClass(Class<T> classReference, Object... constructorArguments)
throws InstantiationException, IllegalAccessException, SecurityException,
NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
Class<?>[] argumentTypes = new Class<?>[constructorArguments.length];
for (int i = 0; i < constructorArguments.length; i++)
argumentTypes[i] = constructorArguments[i].getClass();
Constructor<T> ctor = classReference.getConstructor(argumentTypes);
return ctor.newInstance(constructorArguments);
}
編輯:作爲中指出如果您在參數中傳遞子類,則此代碼不起作用
公平警告:在任何一般情況下都不一定會有解決辦法。有些類是故意設計的,所以它們不能被實例化。有些類是故意設計的,所以它們只能被實例化一次。你可能會打破這個階級的假設,並搞砸它的邏輯。 –