Java使用反射通过字符串创建Java对象并传递参数
创建的类信息
public class DataTypeTest {
int dataInt;
double dataDou;
public DataTypeTest(int dataInt, double dataDou) {
this.dataInt = dataInt;
this.dataDou = dataDou;
}
@Override
public String toString() {
return "DataTypeTest{" +
"dataInt=" + dataInt +
", dataDou=" + dataDou +
'}';
}
}
代码实现
public void test() throws NoSuchMethodException {
//字符串信息
String str = "top.linanhua.java1.entity.DataTypeTest";
//数据信息
String dataInt="1";
String dataDou="1.1";
try {
//获取有参构造器
Constructor<?> constructor = Class.forName(str).getDeclaredConstructor(int.class,double.class);
//设置无障碍访问,跨越访问权限,=
constructor.setAccessible(true);
//创建实例并传递参数
Object o = constructor.newInstance(Integer.parseInt(dataInt), Double.parseDouble(dataDou));
System.out.println(o);
System.out.println(o.getClass());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
输出
DataTypeTest{dataInt=1, dataDou=1.1}
class top.linanhua.java1.entity.DataTypeTest