Java遍历对象属性(反射实现)

/**
 * 
 * 遍历对象属性值(利用反射实现),可以在需要对 对象中的每个字段都执行相同的处理时使用
 *
 */
public class DisposeUtil {


public static Object dispose(Object object){
Field[] field = object.getClass().getDeclaredFields(); // 获取实体类的所有属性,返回Field数组
        try {
            for (int j = 0; j < field.length; j++) { // 遍历所有属性
                String name = field[j].getName(); // 获取属性的名字
                name = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法
                String type = field[j].getGenericType().toString(); // 获取属性的类型
                if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
                    Method m = object.getClass().getMethod("get" + name);
                    String value = (String) m.invoke(object); // 调用getter方法获取属性值
                    //.....处理开始........
                  执行处理方法
                    //.....处理结束........
                    m = object.getClass().getMethod("set"+name,String.class);
                    m.invoke(object, t_value);
                }
                if (type.equals("class java.lang.Integer")) {
                    Method m = object.getClass().getMethod("get" + name);
                    Integer value = (Integer) m.invoke(object);
                    if (value == null) {
                        m = object.getClass().getMethod("set"+name,Integer.class);
                        m.invoke(object, 1);
                    }
                }
                if (type.equals("class java.lang.Boolean")) {
                    Method m = object.getClass().getMethod("get" + name);
                    Boolean value = (Boolean) m.invoke(object);
                    if (value == null) {
                        m = object.getClass().getMethod("set"+name,Boolean.class);
                        m.invoke(object, false);
                    }
                }
                if (type.equals("class java.util.Date")) {
                    Method m = object.getClass().getMethod("get" + name);
                    Date value = (Date) m.invoke(object);
                    if (value == null) {
                        m = object.getClass().getMethod("set"+name,Date.class);
                        m.invoke(object, new Date());
                    }
                }
                // 如果有需要,可以仿照上面继续进行扩充,再增加对其它类型的判断
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        
        return object;
}

}


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Java递归遍历对象属性和子对象是指在一个对象中递归地遍历所有属性,包括子对象中的属性。 首先,我们需要编写一个递归方法,该方法可以接收一个对象作为参数。在方法内部,我们首先通过反射获取当前对象的所有属性。然后,我们可以通过遍历这些属性,对于每个属性就行一些操作,比如输出属性名称和值。 如果属性是一个对象类型,我们可以对该属性也进行递归调用,以对子对象属性进行遍历。 下面是一个简单的示例代码: ```java import java.lang.reflect.Field; public class ObjectTraversal { public static void traverseObject(Object obj) throws IllegalAccessException { Class<?> clazz = obj.getClass(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); System.out.println("属性名称:" + field.getName()); System.out.println("属性值:" + field.get(obj)); if (field.getType().isAssignableFrom(Object.class)) { traverseObject(field.get(obj)); // 递归遍历对象 } } } public static void main(String[] args) throws IllegalAccessException { // 假设我们有一个Person对象 Person person = new Person("张三", 20, new Address("北京", "朝阳区")); // 使用递归遍历对象属性和子对象属性 traverseObject(person); } } class Person { private String name; private int age; private Address address; // 省略构造方法和getter/setter方法 public Person(String name, int age, Address address) { this.name = name; this.age = age; this.address = address; } } class Address { private String city; private String district; // 省略构造方法和getter/setter方法 public Address(String city, String district) { this.city = city; this.district = district; } } ``` 以上代码中,我们定义了一个`traverseObject`方法来递归遍历对象属性和子对象属性。然后在main方法中创建了一个Person对象,并使用`traverseObject`方法对其进行遍历。输出结果如下: ``` 属性名称:name 属性值:张三 属性名称:age 属性值:20 属性名称:address 属性值:Address@1b6d3586 属性名称:city 属性值:北京 属性名称:district 属性值:朝阳区 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值