要根据字符串创建对象,可以使用 Class.forName(String) 方法;
而要新建一个可以指定初始值参数的对象,就必须得使用 getConstructor(Class<T>...) 方法;
之后再对Constructor对象调用 newInstance(Object...) 方法。
然而,getConstructor 方法要接受零个或多个Class对象,且 newInstance 方法也要接受零个或多个Object参数,如果都要通过封装的方法传进来肯定不可以。
可以这样做,封装的方法传入 newInstance 方法的参数,然后根据获得各个参数的 Class 对象并传入 getConstructor 方法。
public static Object newObj(String className, Object... args) {
Class[] classes = new Class[args.length];
for (int i = 0; i < classes.length; i++) {
classes[i] = args[i].getClass();
}
Object obj = null;
try {
obj = Class.forName(className).getConstructor(classes).newInstance(args);
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
如,String str = newObj("java.lang.String", "hello world");