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);
}
編集:コメントで指摘されているように、引数でサブクラスを渡すと、このコードは機能しません