一、前言

最近有一个功能,需要判断传过来的对象的属性值是否为空,并附带其他一些判断操作。一开始想着直接obj.getXXX()取出来再挨个判断,后来觉得写了太多重复代码了,于是想着用Java反射试一试。
现在在这里记录一下, 换了一个例子,获取Person对象的属性名和属性值。

二、代码

Person对象:

public class Person {
    private String firstName;
    private String lastName;
    
    public Person(String firstName, String lastName) {
	    this.firstName = firstName;
	    this.lastName = lastName;
    }
}

获取属性和值的方法:

public static void main(String[] args) {
        Person p1 = new Person("xiao ming", "huang");
        getField(p1);
    }
    public static void getField(Object obj) {
        Class<?> clazz = obj.getClass();
        Field[] field = clazz.getDeclaredFields();
        for (Field f : field) {
            f.setAccessible(true);
            try {
                System.out.println("属性名:" + f.getName()+",属性值:" + f.get(obj).toString());
                // ...
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }

结果:

属性名:firstName,属性值:xiao ming
属性名:lastName,属性值:huang