利用java中的反射机制,动态的执行方法并根据表字段中配置的属性名称动态获取对应的导入的属性值。

发布时间 2023-03-28 17:14:00作者: 勇敢-的心
private void getPointTxNameAndCall(ConcreteEquipmentInfo info, ConcreteMonitorRealTime realTime,MonitoringRecordImportVO importVO) throws Exception {
String pointT1Name = info.getPointT1Name();
String clzParam1 = "setPointT1";
if (!StringUtils.isEmpty(pointT1Name)){
realTime.setPointT1(setPointTxTemp(importVO, pointT1Name, clzParam1).getPointT1());
}
String pointT2Name = info.getPointT2Name();
String clzParam2 = "setPointT2";
if (!StringUtils.isEmpty(pointT2Name)){
realTime.setPointT2(setPointTxTemp(importVO, pointT2Name, clzParam2).getPointT2());
}
String pointT3Name = info.getPointT3Name();
String clzParam3 = "setPointT3";
if (!StringUtils.isEmpty(pointT3Name)){
realTime.setPointT3(setPointTxTemp(importVO, pointT3Name, clzParam3).getPointT3());
}
String pointT4Name = info.getPointT4Name();
String clzParam4 = "setPointT4";
if (!StringUtils.isEmpty(pointT4Name)){
realTime.setPointT4(setPointTxTemp(importVO, pointT4Name, clzParam4).getPointT4());
}
String pointT5Name = info.getPointT5Name();
String clzParam5 = "setPointT5";
if (!StringUtils.isEmpty(pointT5Name)){
realTime.setPointT5(setPointTxTemp(importVO, pointT5Name, clzParam5).getPointT5());
}
String pointT6Name = info.getPointT6Name();
String clzParam6 = "setPointT6";
if (!StringUtils.isEmpty(pointT6Name)){
realTime.setPointT6(setPointTxTemp(importVO, pointT6Name, clzParam6).getPointT6());
}
String pointT7Name = info.getPointT7Name();
String clzParam7 = "setPointT7";
if (!StringUtils.isEmpty(pointT7Name)){
realTime.setPointT7(setPointTxTemp(importVO, pointT7Name, clzParam7).getPointT7());
}
String pointT8Name = info.getPointT8Name();
String clzParam8 = "setPointT8";
if (!StringUtils.isEmpty(pointT8Name)){
realTime.setPointT8(setPointTxTemp(importVO, pointT8Name, clzParam8).getPointT8());
}
}


private ConcreteMonitorRealTime setPointTxTemp(MonitoringRecordImportVO importVO,
String pointTxName, String clzParam) throws Exception {
// 使用反射机制,动态获取ConcreteMonitorRealTime对象的方法,并执行。
Class<ConcreteMonitorRealTime> clz= ConcreteMonitorRealTime.class;
ConcreteMonitorRealTime obj= clz.newInstance();
// 根据参数名称,动态获取ConcreteMonitorRealTime对象的方法。
Method target = clz.getDeclaredMethod(clzParam, Float.class);
// 设置方法为可执行权限。
target.setAccessible(true);

// 根据参数并利用反射机制来执行不同的方法,给ConcreteMonitorRealTime对象中的字段赋值。
if (PonitTnConstant.SURROUND_TEMP.equals(pointTxName)){
target.invoke(obj, Float.valueOf(DoubleUtil.isNumeric(importVO.getSurroundTemp())==true?importVO.getSurroundTemp():"0"));
}
if (PonitTnConstant.SURFACE_TEMP.equals(pointTxName)){
target.invoke(obj, Float.valueOf(DoubleUtil.isNumeric(importVO.getSurfaceTemp())==true?importVO.getSurfaceTemp():"0"));
}
if (PonitTnConstant.INSULATING_LAYER_TEMP.equals(pointTxName)){
target.invoke(obj, Float.valueOf(DoubleUtil.isNumeric(importVO.getInsulatingLayerTemp())==true?importVO.getInsulatingLayerTemp():"0"));
}
if (PonitTnConstant.ABOVE_TEMP.equals(pointTxName)){
target.invoke(obj, Float.valueOf(DoubleUtil.isNumeric(importVO.getAboveTemp())==true?importVO.getAboveTemp():"0"));
}
if (PonitTnConstant.MIDDLE_TEMP.equals(pointTxName)){
target.invoke(obj, Float.valueOf(DoubleUtil.isNumeric(importVO.getMiddleTemp())==true?importVO.getMiddleTemp():"0"));
}
if (PonitTnConstant.BELOW_TEMP.equals(pointTxName)){
target.invoke(obj, Float.valueOf(DoubleUtil.isNumeric(importVO.getBelowTemp())==true?importVO.getBelowTemp():"0"));
}
if (PonitTnConstant.UNDERSIDE_TEMP.equals(pointTxName)){
target.invoke(obj, Float.valueOf(DoubleUtil.isNumeric(importVO.getUndersideTemp())==true?importVO.getUndersideTemp():"0"));
}
return obj;
}