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

Python013

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

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

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("==========================================")

        }

    }

}

用反射,代码你可以参考下面的:

public static void testReflect(Object model) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{

Field[] field = model.getClass().getDeclaredFields() //获取实体类的所有属性,返回Field数组

for(int j=0 j<field.length j++){ //遍历所有属性

String name = field[j].getName() //获取属性的名字

System.out.println("attribute name:"+name)

String type = field[j].getGenericType().toString() //获取属性的类型

if(type.equals("class java.lang.String")){ //如果type是类类型,则前面包含"class ",后面跟类名

Method m = model.getClass().getMethod("get" + name.substring(0,1).toUpperCase() + name.substring(1) )

String value = (String) m.invoke(model) //调用getter方法获取属性值

if(value != null){

System.out.println("attribute value:"+value)

}

}

if(type.equals("class java.lang.Integer")){

Method m = model.getClass().getMethod("get" + name.substring(0,1).toUpperCase() + name.substring(1) )

Integer value = (Integer) m.invoke(model)

if(value != null){

System.out.println("attribute value:"+value)

}

}

if(type.equals("class java.lang.Short")){

Method m = model.getClass().getMethod("get" + name.substring(0,1).toUpperCase() + name.substring(1) )

Short value = (Short) m.invoke(model)

if(value != null){

System.out.println("attribute value:"+value) }

}

if(type.equals("class java.lang.Double")){

Method m = model.getClass().getMethod("get" + name.substring(0,1).toUpperCase() + name.substring(1) )

Double value = (Double) m.invoke(model)

if(value != null){

System.out.println("attribute value:"+value)

}

}

if(type.equals("class java.lang.Boolean")){

Method m = model.getClass().getMethod("get"+name)

Boolean value = (Boolean) m.invoke(model)

if(value != null){

System.out.println("attribute value:"+value)

}

}

if(type.equals("class java.util.Date")){

Method m = model.getClass().getMethod("get"+name)

Date value = (Date) m.invoke(model)

if(value != null){

System.out.println("attribute value:"+value.toLocaleString())

}

}

}