静态方法通过反射获取list集合

静态方法工具

    /**
     * 反射获取对象中的list数据
     *
     * @param object
     */
    public static <T> List<T> getList(Field field, Object object) {
        List<T> resultList = new ArrayList<>();
        if (object != null) {
            try {
                Class clzz = field.get(object).getClass();
                //反射调用获取到list的size方法来获取到集合的大小
                Method sizeMethod = clzz.getDeclaredMethod("size");
                if (!sizeMethod.isAccessible()) {
                    sizeMethod.setAccessible(true);
                }
                //集合长度
                int size = (int) sizeMethod.invoke(field.get(object));
                //循环遍历获取到数据
                for (int i = 0; i < size; i++) {
                    //反射获取到list的get方法
                    Method getMethod = clzz.getDeclaredMethod("get", int.class);
                    //调用get方法获取数据
                    if (!getMethod.isAccessible()) {
                        getMethod.setAccessible(true);
                    }

                    Object invoke = getMethod.invoke(field.get(object), i);
                    T var1 = (T) invoke;
                    resultList.add(var1);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return resultList;
    }

备注

其中的 “field” 是 object 对象中的属性对应的 Field,field参数也可以改为String类型的参数名字,然后从object中获取该Field

链接:一个通用的获取参数值得切面( aop+反射+泛型 支持参数值比较深的情况)

猜你喜欢

转载自blog.csdn.net/Draymond_feng/article/details/107691882