import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Scanner;
public class ReflectiveInstantiation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
// 获取类名
System.out.println("请输入类名:");
String className = scanner.nextLine();
// 获取构造函数参数类型和值
System.out.println("请输入构造函数参数个数:");
int paramCount = scanner.nextInt();
scanner.nextLine(); // 清除换行符
Class<?>[] paramTypes = new Class[paramCount];
Object[] paramValues = new Object[paramCount];
for (int i = 0; i < paramCount; i++) {
System.out.println("请输入第 " + (i + 1) + " 个参数的类型 (如 java.lang.String):");
String paramTypeName = scanner.nextLine();
paramTypes[i] = Class.forName(paramTypeName);
System.out.println("请输入第 " + (i + 1) + " 个参数的值:");
if (paramTypes[i] == int.class) {
paramValues[i] = scanner.nextInt();
scanner.nextLine(); // 清除换行符
} else if (paramTypes[i] == double.class) {
paramValues[i] = scanner.nextDouble();
scanner.nextLine(); // 清除换行符
} else {
paramValues[i] = scanner.nextLine();
}
}
// 使用反射实例化对象
Class<?> clazz = Class.forName(className);
Constructor<?> constructor = clazz.getConstructor(paramTypes);
Object instance = constructor.newInstance(paramValues);
System.out.println("实例化成功: " + instance);
} catch (ClassNotFoundException e) {
System.out.println("类不存在: " + e.getMessage());
} catch (NoSuchMethodException e) {
System.out.println("构造函数不匹配: " + e.getMessage());
} catch (InvocationTargetException | InstantiationException | IllegalAccessException e) {
System.out.println("实例化失败: " + e.getMessage());
}
}
}