反射调用带参数的构造函数
通过反射调用带参数的构造函数
通过反射,在程序运行中,选择实例化哪个对象是java编程中,很通用的方法,我们先建一个父类,声明通用的处理方法,然后写几个不同功能的子类,继承父类,并且实现各自的执行方法,然后在程序运行过程中,通过反射实例化具体的子类对象,然后调用通用处理方法执行操作
//父类
public abstract class DataImport {
public abstract void beforeSave(String beanName, String sheetName, String[] dictArray, JSONObject jsonObject, Map<String, String> dictMap);
public abstract void afterSave(String beanName, Object obj, String sheetName);
public abstract JSONObject execute();
}
//子类继承父类
public class EmployeeDataImport extends DataImport {
private JSONObject jsonObject,;
private SnowflakeIdWorker idWorker
public EmployeeDataImport(JSONObject jsonObject, SnowflakeIdWorker idWorker) {
this.jsonObject = jsonObject=;
this.idWorker =idWorker;
}
public void beforeSave(String beanName, String sheetName, String[] dictArray, JSONObject jsonObject, Map<String, String> dictMap){
return;
};
public void afterSave(String beanName, Object obj, String sheetName){
return;
};
}
//通过反射,调用带参构造函数
Class myClass = Class.forName("com.ht.common.dataExportOrImport.EmployeeDataImport");
//调用带参构造函数
Constructor c = myClass.getDeclaredConstructor(new Class[]{JSONObject.class, SnowflakeIdWorker.class});
c.setAccessible(true);
DataImport dataImport = (DataImport)c.newInstance(new Object[]{jsonObject,idWorker});
//开始导入
JSONObject jsonObject = dataImport.execute();