zoukankan      html  css  js  c++  java
  • list<?>转换成 对应的 class

    项目中用到的,list转换成bean。因为查询出来的数据用list 泛型接收,要返回 实体对象。所以需要对应转换。

    主要用到的技术:反射。

    上代码:

    public static <T> List<T> toBean(List<?> list, Class<T> clz) {
            int count = 0;
            Field[] fields = clz.getDeclaredFields();
            List<T> lst = new ArrayList();
            String propertyName = "";
            Object obj = null;
    
            try {
                for(int i = 0; i < list.size(); ++i) {
                    obj = clz.newInstance();
                    Object[] oo = (Object[])list.get(i);
                    Field[] var12 = fields;
                    int var11 = fields.length;
    
                    for(int var10 = 0; var10 < var11; ++var10) {
                        Field fd = var12[var10];
                        Type t = fd.getGenericType();
                        String className = t.toString().replace("class", "");
                        Class<?> type = Class.forName(className.trim());
                        propertyName = "set" + change(fd.getName());
                        Method mt = obj.getClass().getMethod(propertyName, new Class[]{type});
                        if(!"java.lang.String".equals(className.trim())) {
                            if("java.lang.Integer".equals(className.trim())) {
                                mt.invoke(obj, new Object[]{Integer.valueOf(Integer.parseInt(oo[count] == null?"-1":oo[count].toString()))});
                            } else if("java.lang.Long".equals(className.trim())) {
                                mt.invoke(obj, new Object[]{Long.valueOf(Long.parseLong(oo[count] == null?"-1":oo[count].toString()))});
                            } else {
                                Clob clobs;
                                if("java.sql.Date".equals(className.trim())) {
                                    Date date = (Date)oo[count];
                                    if(!"".equals(date) && date != null) {
                                        java.sql.Date sd = new java.sql.Date(date.getTime());
                                        mt.invoke(obj, new Object[]{sd});
                                    } else {
                                        clobs = null;
                                        mt.invoke(obj, new Object[]{clobs});
                                    }
                                } else if("oracle.sql.CLOB".equals(className.trim())) {
                                    if(oo[count] == null) {
                                        mt.invoke(obj, new Object[1]);
                                    } else {
                                        SerializableClobProxy sc = (SerializableClobProxy)Proxy.getInvocationHandler(oo[count]);
                                        clobs = sc.getWrappedClob();
                                        CLOB clob = (CLOB)clobs;
                                        mt.invoke(obj, new Object[]{clob});
                                    }
                                } else {
                                    mt.invoke(obj, new Object[]{oo[count]});
                                }
                            }
                        } else {
                            String s = "" + oo[count];
                            if(s == null || "null".equals(s)) {
                                s = "";
                            }
    
                            mt.invoke(obj, new Object[]{s});
                        }
    
                        ++count;
                    }
    
                    count = 0;
                    lst.add((T)obj);
                }
            } catch (SecurityException var20) {
                logger.error(var20.getMessage());
            } catch (IllegalArgumentException var21) {
                logger.error(var21.getMessage());
            } catch (InstantiationException var22) {
                logger.error(var22.getMessage());
            } catch (IllegalAccessException var23) {
                logger.error(var23.getMessage());
            } catch (ClassNotFoundException var24) {
                var24.printStackTrace();
                logger.error(var24.getMessage());
            } catch (NoSuchMethodException var25) {
                logger.error(var25.getMessage());
            } catch (InvocationTargetException var26) {
                logger.error(var26.getMessage());
            }
    
            return lst;
        }
  • 相关阅读:
    Vue3.0官方文档
    简单实现Vue的双向绑定原理
    小程序使用weapp-qrcode二维码插件,宽高自适应解决方法
    小程序判断ios还是android
    手写实现bind
    手写实现call,apply函数
    React onClick点击事件传参三种写法
    zynq 中断
    zynq_ps端点亮led灯代码
    突然发现自己的很多博客无法显示图片,人都傻了,于是就整理了一早上,全部换成了markdown格式,就好了,希望博客的时间不会对大家造成困扰!!!
  • 原文地址:https://www.cnblogs.com/caozengling/p/7026164.html
Copyright © 2011-2022 走看看