泛型方法+反射,解决重复代码问题
1.泛型方法声明
public <T> List<SigmaInstance> generateInstancesByDataInfoList(List<T> infoList,
Map<Long, GroupInfo> groupMap,
Map<String, AppInfo> appMap) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
}
2.使用范例
/**
* 基于传递过来的对象列表,不同对象获取不同的属性写到internalAddress属性中去
* @param infoList
* @param groupMap
* @param appMap
* @param <T>
* @return
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalAccessException
*/
public <T> List<SigmaInstance> generateInstancesByDataInfoList(List<T> infoList,
Map<Long, GroupInfo> groupMap,
Map<String, AppInfo> appMap) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
List<SigmaInstance> sigmaInstances = Lists.newArrayList();
String getGroupIdMethodName = "getGroupId";
for (T devopsInstanceInfo:infoList) {
Method groupMethod = devopsInstanceInfo.getClass().getMethod(getGroupIdMethodName);
Long groupId = (Long) groupMethod.invoke(devopsInstanceInfo);
GroupInfo devopsGroupInfo = groupMap.get(groupId);
if (null == devopsGroupInfo){
LOG.warn("Get devopsGroupInfo error,devopsInstanceInfo: {}",JsonUtils.toJSONString(devopsInstanceInfo));
continue;
}
AppInfo devopsAppInfo = appMap.get(devopsGroupInfo.getAppEnName());
if (null == devopsAppInfo){
LOG.warn("Get devopsAppInfo error,devopsGroupInfo: {}",JsonUtils.toJSONString(devopsGroupInfo));
continue;
}
SigmaInstance sigmaInstance = new SigmaInstance();
sigmaInstance.setGroupEnName(devopsGroupInfo.getGroupName());
sigmaInstance.setAppEnName(devopsAppInfo.getAppEnName());
sigmaInstance.setPlatform(Platform.DEVOPS);
sigmaInstance.setEnv(generateEnvTypeByDevopsGroup(devopsGroupInfo));
Method getInternalAddressMethod = devopsInstanceInfo.getClass().getMethod(fieldMethodNameMap.get(devopsInstanceInfo.getClass()));
sigmaInstance.setInternalAddress((String) getInternalAddressMethod.invoke(devopsInstanceInfo));
sigmaInstance.setUseType(useTypeMap.get(devopsInstanceInfo.getClass()));
sigmaInstance.setCreateTime(new Date());
sigmaInstance.setCreateUser(DevopsProcessor.class.getSimpleName());
sigmaInstance.setUpdateTime(new Date());
sigmaInstance.setUpdateUser(DevopsProcessor.class.getSimpleName());
sigmaInstances.add(sigmaInstance);
}
return sigmaInstances;
}
原创:做时间的朋友
分类:
泛型
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示