2 qq 24534807 qq_24534807 于 2017.09.15 14:49 提问

Java List<Object> 取值???!!!
     List<User> list = (mybatis、Oracle返回值);
     for (User user : list) {
            System.out.println(user.getName());
            System.out.println(user.getAge());
        }

如上例子,可以得到list,可是这样写就是一个实体类就要写一遍(user.getName())这样的,如果这个实体类里面是很多很多,这样就要写很多很多。
想要一个通用的方法,就是不管List里面的object是什么实体类,这个实体类里面包含多少,都能通过遍历获得list,请问有方法吗?有实例可以参考的最好了,谢谢!

6个回答

zc274456223
zc274456223   2017.09.15 15:08
已采纳
 import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class PrintObjectList {

    public static void printList(List list) {
        if (list == null || list.size() == 0)
            return;
        for (Object o : list) {
            if (o != null){
                Field[] fields = o.getClass().getDeclaredFields();
                try {
                    for (Field f : fields) {
                        f.setAccessible(true);
                        String name = f.getName();
                        Object value = f.get(o);
                        System.out.println(name + "--" + value.toString());
                    }
                } catch (IllegalAccessException e) {

                }
            }
        }
    }

    public static void main(String args[]){

        List list = new ArrayList();
        list.add(new Example(0, "aa"));
        list.add(new Example(1, "bb"));
        list.add(new Example(2, "cc"));
        list.add(new Example(3, "dd"));

        printList(list);
    }
}


class Example{
    private int i;
    private String s;

    public Example(int i, String s){
        this.i = i;
        this.s = s;
    }

    public int getI() {
        return i;
    }

    public void setI(int i) {
        this.i = i;
    }

    public String getS() {
        return s;
    }

    public void setS(String s) {
        this.s = s;
    }
}
qq_24534807
qq_24534807 回复年岁不吾与: 没删啊,非常感谢!
2 个月之前 回复
zc274456223
zc274456223 怎么把第一个回复删了啊,楼主看看这个有没有解决你的问题,有不会的可以交流一下
2 个月之前 回复
a545129305
a545129305   2017.09.15 14:59

可以试着自己写一个反射的函数

CSNDRYL
CSNDRYL   2017.09.15 15:01

额,除非你要执行的都是object的方法,这个USer才可以写成Object

qq_24534807
qq_24534807 那个object只是个举例的,像List<User>、List<Student>等等这样的,只是想用object来代替而已
2 个月之前 回复
u010485304
u010485304   2017.09.15 15:06

如果你只是遍历打印,那就是在实体类重写toString()方法,然后java8环境中用 list.forEach(System.out::print);

zc274456223
zc274456223   2017.09.15 15:08

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class PrintObjectList {

public static void printList(List list) {
    if (list == null || list.size() == 0)
        return;
    for (Object o : list) {
        if (o != null){
            Field[] fields = o.getClass().getDeclaredFields();
            try {
                for (Field f : fields) {
                    f.setAccessible(true);
                    String name = f.getName();
                    Object value = f.get(o);
                    System.out.println(name + "--" + value.toString());
                }
            } catch (IllegalAccessException e) {

            }
        }
    }
}

public static void main(String args[]){

    List list = new ArrayList();
    list.add(new Example(0, "aa"));
    list.add(new Example(1, "bb"));
    list.add(new Example(2, "cc"));
    list.add(new Example(3, "dd"));

    printList(list);
}

}

class Example{
private int i;
private String s;

public Example(int i, String s){
    this.i = i;
    this.s = s;
}

public int getI() {
    return i;
}

public void setI(int i) {
    this.i = i;
}

public String getS() {
    return s;
}

public void setS(String s) {
    this.s = s;
}

}

zc274456223
zc274456223 这个显示的有问题
2 个月之前 回复
huang931027
huang931027   2017.09.15 15:30

那可以直接用阿里的那个转成JSON的jar包。直接转json

huang931027
huang931027 其实就是反射的原理。归根结底还是得到属性的名称的
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片