• 泛型方法+反射,解决重复代码问题


    1.泛型方法声明

    放在返回结果前,进行修饰,传参List infoList 进行参数的泛型支持

    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;
        }
    
    原创:做时间的朋友
  • 相关阅读:
    一些开发海学网站过程中的Javascript
    准备学习 Windows Forms 2.0 Programming
    终于买了个Dell d400二手笔记本
    Asp.Net应用程序中为什么要MachineKey?如何生成MachineKey?
    今天装了苏州数字电视
    windows Forms 编程实战 源代码
    重新整理 .net core 实践篇——— filter[四十四]
    not noly go —— 运行轨迹[一]
    .NET CLR基本术语
    [转]SqlServer四个排名函数(row_number、rank、dense_rank和ntile)的比较
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/14509892.html
Copyright © 2020-2023  润新知