美文网首页
反射,获取对象属性中集合里的元素对象的属性

反射,获取对象属性中集合里的元素对象的属性

作者: 杰罗米诺大背头 | 来源:发表于2019-12-01 13:18 被阅读0次

Rtu obj=new Rtu();

        List cargos = obj.getCargos();

        cargos.add(new Cargo());

        cargos.add(new Cargo());

        cargos.add(new Cargo());

        obj.setCargos(cargos);

        Field[] fields = obj.getClass().getDeclaredFields();//Object是已经被赋值的对象实例

        for (Field field : fields) {

if (!field.isAccessible()) {

field.setAccessible(true);

            }

if (List.class.isAssignableFrom(field.getType())) {

Method m = List.class.getDeclaredMethod("size");

                int size = (Integer) m.invoke(field.get(obj));//调用list的size方法,得到list的长度

                System.out.println(size);

                Type t = field.getGenericType();

                if (tinstanceof ParameterizedType) {

ParameterizedType pt = (ParameterizedType) t;

                    Class clz = (Class) pt.getActualTypeArguments()[0];//得到对象list中实例的类型

                    System.out.println(clz.getName());//获得List的泛型类型

                    //获取集合的第一个对象

                    for (int i =0; i < size; i++) {//遍历list,调用get方法,获取list中的对象实例

                        Method getM= List.class.getDeclaredMethod("get", int.class);

                        if(!getM.isAccessible()){

getM.setAccessible(true);

                        }

Object list_i_Obj = getM.invoke(field.get(obj), i);

//                        System.out.println(list_i_Obj);//集合中的每个元素对象

                        //获取每个对象的cargoNumber属性值

                        Field cnField = clz.getDeclaredField("cargoNumber");

                        cnField.setAccessible(true);

                        Object o = cnField.get(list_i_Obj);//每个元素对象中的cargoNumber值

                        System.out.println(o.toString());

                    }

}

}

}

相关文章

网友评论

      本文标题:反射,获取对象属性中集合里的元素对象的属性

      本文链接:https://www.haomeiwen.com/subject/bdgxgctx.html