java 用户自定义的父类转换成子类的方法

        在工作中,一般是实体类对应的数据库表,另外再定义一个Model继承实体类,在model里往往添加一些辅助的属性。我们从数据库查出的数据放在实体类里,但是展现数据时需要用到model类,这时就需要把实体类转换成Model类。父类不可能强制转换成子类,所以写了一个通用的方法,适用于这种场景下的转换,代码如下:

    /**
     * 通过public的 get set方法进行复制,适合用于父类转换成子类
     * @param objSource
     * @param clazzSrc
     * @param clazzDes
     * @return
     * @throws InstantiationException
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     * @throws InvocationTargetException
     */
    public static <T, K> T copyByMethod(K objSource,Class<K> clazzSrc,Class<T> clazzDes ) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {  
        
        if(null == objSource) return null;//如果源对象为空,则直接返回null  
          
        T objDes = clazzDes.newInstance();  
          
        return mergeByPublicMethod(objSource, objDes, clazzSrc, clazzDes);  
          
    } 

public static <T, K> T mergeByPublicMethod(K objSource,T objDes,Class<K> clazzSrc,Class<T> clazzDes) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{  
          
        if(null == objSource) return null;//如果源对象为空,则直接返回null  
  
        //获取目标对象的所有属性  
        Method[] methodDeses = clazzDes.getMethods();  
        Map<String,Method> m = new HashMap<String, Method>();  
        // 循环遍历方法,获取set方法    
        for ( Method method : methodDeses )    
        {   
            //如果不是set方法则跳过  
            if(!method.getName().startsWith("set")) continue;
            m.put(method.getName().substring(3), method);
            
        }  
          
          
        // 获得源对象所有方法 
        Method[] sourceMethods = clazzSrc.getMethods();  
        // 循环遍方法    
        for ( Method method : sourceMethods )    
        {    
            //如果是set方法则跳过
            if(!method.getName().startsWith("get")) continue;
            //如果目标对象不存在该方法,则跳过  
            if(!m.containsKey(method.getName().substring(3))) continue;  
            
            m.get(method.getName().substring(3)).invoke(objDes, method.invoke(objSource));
             
        }    
        return objDes; 

    } 


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值