Java中如何循环输出对象、属性和值【亲测可用】、反射机制

简介: Java中如何循环输出对象、属性和值【亲测可用】、反射机制

现用版本:

Class<?> clazz = object.getClass();
    for (; clazz != Object.class; clazz = clazz.getSuperclass()) {//向上循环  遍历父类
      Field[] field = clazz.getDeclaredFields();
      for (Field f : field) {
        f.setAccessible(true);
        try {
          if (null != f) {
            if(f.get(object) == null || "".equals(f.get(object))){
              stringBufferOne.append(f.getName()+"$");
              stringBufferTwo.append("$");
              System.out.println("属性:"+f.getName()+" 值:"+f.get(object));
            }else{
              stringBufferOne.append(f.getName()+"$");
              stringBufferTwo.append(f.get(object).toString()+"$");
              System.out.println("属性:"+f.getName()+" 值:"+f.get(object).toString());
            }
          }
        } catch (IllegalArgumentException e) {
          e.printStackTrace();
        } catch (IllegalAccessException e) {
          e.printStackTrace();
        }
      }
}

以下仅供参考:

Field[] fields = userDetails.getClass().getDeclaredFields();
if (null == fields) {
    return;
}
for (Field s : fields) {
    String name = s.getName();//获取属性名
    String type = s.getGenericType().toString();//获取属性类型
    if (type.equals("class java.lang.String")) {
        try {
            Method m = userDetails.getClass().getMethod("get" + name.substring(0, 1).toUpperCase() + name.substring(1));
            String value = (String) m.invoke(userDetails);
            if (null != value) {
    Log.d("---属性名---",name);  
                Log.d("---属性值---",value);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    if (type.equals("class java.lang.Integer")) {
        try {
            Method m = userDetails.getClass().getMethod("get" + name.substring(0, 1).toUpperCase() + name.substring(1));
            int value = (String) m.invoke(userDetails);
            if (null != value) {
    Log.d("---属性名---",name);  
                Log.d("---属性值---",value);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
--------------------- 
目录
相关文章
|
8月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
1038 157
|
10月前
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
10月前
|
Java
Java编程:理解while循环的使用
总结而言, 使用 while 迴圈可以有效解决需要多次重复操作直至特定條件被触发才停止執行任务场景下问题; 它简单、灵活、易于实现各种逻辑控制需求但同时也要注意防止因邏各错误导致無限迁璇発生及及時處理可能発生异常以确保程序稳定运作。
639 0
|
10月前
|
存储 人工智能 JavaScript
Java从作用域到对象高级应用​
本内容详细讲解了JavaScript中的作用域类型(函数作用域、块作用域、全局作用域)、作用域链、垃圾回收机制、闭包、变量提升、函数参数、数组方法、内置构造函数、对象高级知识、原型链、对象赋值、深浅拷贝、递归、异常处理及this指向等内容,全面覆盖JS核心概念与编程技巧。
127 0
|
11月前
|
人工智能 缓存 安全
Java中的反射机制:深入探索与应用
Java反射机制是程序运行时动态获取类信息并操作类成员的特性,具备高度灵活性,但也伴随性能与安全风险。本文详解反射的基本用法、高级应用及最佳实践,助你掌握这一强大工具的正确使用方式。
236 0
|
11月前
|
存储 Java
Java对象的内存布局
在HotSpot虚拟机中,Java对象的内存布局分为三部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头包含Mark Word、Class对象指针及数组长度;实例数据存储对象的实际字段内容;对齐填充用于确保对象大小为8字节的整数倍。
222 0
|
11月前
|
人工智能 安全 Java
掌握Java反射:在项目中高效应用反射机制
Java反射是一种强大功能,允许程序在运行时动态获取类信息、创建对象、调用方法和访问字段,提升程序灵活性。它在框架开发、动态代理、注解处理等场景中广泛应用,如Spring和Hibernate。但反射也存在性能开销、安全风险和代码复杂性,应谨慎使用。
238 0
|
12月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
478 1
|
12月前
|
前端开发 Java 数据库连接
java bo 对象详解_全面解析 java 中 PO,VO,DAO,BO,POJO 及 DTO 等几种对象类型
Java开发中常见的六大对象模型(PO、VO、DAO、BO、POJO、DTO)各有侧重,共同构建企业级应用架构。PO对应数据库表结构,VO专为前端展示设计,DAO封装数据访问逻辑,BO处理业务逻辑,POJO是简单的Java对象,DTO用于层间数据传输。它们在三层架构中协作:表现层使用VO,业务层通过BO调用DAO处理PO,DTO作为数据传输媒介。通过在线商城的用户管理模块示例,展示了各对象的具体应用。最佳实践包括保持分层清晰、使用工具类转换对象,并避免过度设计带来的类膨胀。理解这些对象模型的区别与联系。
958 1