java中如何遍历实体类的属性和数据类型以及

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中如何遍历实体类的属性和数据类型以及相关的知识,希望对你有一定的参考价值。

可以通过反射获取到属性方法信息:

public class User 
    private int id;
    private String name;
    private double amount;

    public int getId() 
        return id;
    

    public void setId(int id) 
        this.id = id;
    

    public String getName() 
        return name;
    

    public void setName(String name) 
        this.name = name;
    

    public double getAmount() 
        return amount;
    

    public void setAmount(double amount) 
        this.amount = amount;
    

获取类信息:

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

public class ReflectDemo 
    public static void main(String[] args) 
        Class clz = User.class;
        // 获取所有自己定义的属性(不包含从Object继承的,如果需要可使用getFields()方法)
        Field[] fields = clz.getDeclaredFields();
        for (Field f : fields) 
            System.out.println("属性名称:" + f.getName() + ",属性类型:" + f.getType().getName());
        

        // 获取所有自己定义的方法(同样不包含继承的)
        Method[] methods = clz.getDeclaredMethods();
        for (Method m : methods) 
            System.out.println("方法名称:" + m.getName());
            System.out.println("返回值类型:" + m.getReturnType().getName());
            // 获取方法的所有参数
            Parameter[] parameters = m.getParameters();
            for (Parameter p : parameters) 
                System.out.println("参数类型:" + p.getType().getName());
            
            System.out.println("==========================================");
        
    

参考技术A 通过java的反射可以实现,百度一下就知道了

java遍历实体类的属性和数据类型以及属性值

遍历实体类的树形和数据类型一级属性值

    /**
     * 遍历实体类的属性和数据类型以及属性值
     * @param model
     * @throws NoSuchMethodException
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     * @throws InvocationTargetException
     */
    public static void reflectTest(Object model) throws NoSuchMethodException,
                    IllegalAccessException, IllegalArgumentException,
                    InvocationTargetException {
        // 获取实体类的所有属性,返回Field数组
        Field[] field = model.getClass().getDeclaredFields();
        // 遍历所有属性
        for (int j = 0; j < field.length; j++) {
                // 获取属性的名字
                String name = field[j].getName();
                // 将属性的首字符大写,方便构造get,set方法
                name = name.substring(0, 1).toUpperCase() + name.substring(1);
                // 获取属性的类型
                String type = field[j].getGenericType().toString();
                // 如果type是类类型,则前面包含"class ",后面跟类名
                System.out.println("属性为:" + name);
                if (type.equals("class java.lang.String")) {
                        Method m = model.getClass().getMethod("get" + name);
                        // 调用getter方法获取属性值
                        String value = (String) m.invoke(model);
                        System.out.println("数据类型为:String");
                        if (value != null) {
                                System.out.println("属性值为:" + value);
                        } else {
                                System.out.println("属性值为:空");
                        }
                }
                if (type.equals("class java.lang.Integer")) {
                        Method m = model.getClass().getMethod("get" + name);
                        Integer value = (Integer) m.invoke(model);
                        System.out.println("数据类型为:Integer");
                        if (value != null) {
                                System.out.println("属性值为:" + value);
                        } else {
                                System.out.println("属性值为:空");
                        }
                }
                if (type.equals("class java.lang.Short")) {
                        Method m = model.getClass().getMethod("get" + name);
                        Short value = (Short) m.invoke(model);
                        System.out.println("数据类型为:Short");
                        if (value != null) {
                                System.out.println("属性值为:" + value);
                        } else {
                                System.out.println("属性值为:空");
                        }
                }
                if (type.equals("class java.lang.Double")) {
                        Method m = model.getClass().getMethod("get" + name);
                        Double value = (Double) m.invoke(model);
                        System.out.println("数据类型为:Double");
                        if (value != null) {
                                System.out.println("属性值为:" + value);
                        } else {
                                System.out.println("属性值为:空");
                        }
                }
                if (type.equals("class java.lang.Boolean")) {
                        Method m = model.getClass().getMethod("get" + name);
                        Boolean value = (Boolean) m.invoke(model);
                        System.out.println("数据类型为:Boolean");
                        if (value != null) {
                                System.out.println("属性值为:" + value);
                        } else {
                                System.out.println("属性值为:空");
                        }
                }
                if (type.equals("class java.util.Date")) {
                        Method m = model.getClass().getMethod("get" + name);
                        Date value = (Date) m.invoke(model);
                        System.out.println("数据类型为:Date");
                        if (value != null) {
                                System.out.println("属性值为:" + value);
                        } else {
                                System.out.println("属性值为:空");
                        }
                }
        }
    }

由于我的实体bean里有double类型,我又不想用其封装类的方法获取值,于是我在他的基础上又加入了一段代码,

                if (type.equals("double")) {
                    Method m = model.getClass().getMethod("get" + name);
                    double value = (double) m.invoke(model);
                    System.out.println("数据类型为:double");
                    if (value >0) {
                            System.out.println("属性值为:" + value);
                    } else {
                            System.out.println("属性值为:空");
                    }
                }
                System.out.println("属性类型为:"+type);

这样一来,就可以知道属性类型是什么,可以很好的加判断语句了。当然原文代码还有很多值得优化的地方,我这里就没有进行优化,准备等我将它与poi导出整合之后再来优化。

以上是关于java中如何遍历实体类的属性和数据类型以及的主要内容,如果未能解决你的问题,请参考以下文章

java遍历实体类的属性和数据类型以及属性值

java中循环遍历实体类的属性和数据类型以及属性值

java中遍历实体类属性和类型

mysql字段类型为decimal,则java 实体类的对应属性类型应该为啥

C#实体类中如何定义泛型集合类型的属性?

java中如何遍历一个类的所有对象?