java如何遍历对象中的所有属性(字段)和类型

 更新时间:2023年07月24日 14:12:30   作者:识你老鼠  
这篇文章主要介绍了java如何遍历对象中的所有属性(字段)和类型问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

java遍历对象中的所有属性(字段)和类型

业务场景

一个房产交易系统中的业务需求,查询房屋交易状态接口,调用第三方接口返回一个vo对象,该对象的属性主要是描述该房屋的交易情况,

比如是否抵押,是否被查封等,现在需要利用该对象的值决定返回给调用方的返回值。(现在一个对象中有很多个属性,大部分属性的值影响返回结果)

代码:

vo对象:

@Data
public class BDCQZTXX {
    private String fwbm;//房屋编码
    private String bdcdyh;//不动产单元号
    private String xzqhdm;//行政区划代码
    private String sfybdy;//是否ybdy
    private String sfzgedy;//是否zgedy
    private String sfzjgcdy;//是否在建工程抵押
    private String sfcf;//是否查封
    private String sfycf;//是否预查封
    private String sfyg;//是否预购
    private String sfydy;//是否预抵押
    private String sfyy;//是否异议
    private String sfdy;//是否抵押
    private String sfsd;//是否sd
    private String sfdj;//是否登记
    private String sfzdzr;//是否zdzr
    private String sfzbyw;//是否在办业务
    private String bz;//备注

模拟业务处理(测试)

public static void main(String[] args){
	//模拟调用接口返回的对象数据
		String s = "{\n" +
				"    \"fwbm\": \"1\",\n" +
				"    \"bdcdyh\": \"1\",\n" +
				"    \"xzqhdm\": \"1\",\n" +
				"    \"sfdy\": \"0\",\n" +
				"    \"sfzjgcdy\": \"0\",\n" +
				"    \"sfcf\": \"0\",\n" +
				"    \"sfyg\": \"0\",\n" +
				"    \"sfydy\": \"0\",\n" +
				"    \"sfyy\": \"0\",\n" +
				"    \"sfdyi\": \"0\",\n" +
				"    \"sfsd\": \"0\",\n" +
				"    \"sfdj\": \"0\",\n" +
				"    \"sfzdzr\": \"0\",\n" +
				"    \"sfzbym\": \"0\",\n" +
				"    \"bz\": \"\"\n" +
				"  }";
		//是否可售(0不可售1可售)
		int sfks = 1;
		//json字符串转对象(fastjson)
		BDCQZTXX bdcqztxx =JSONObject.parseObject(s, BDCQZTXX.class);
		//遍历对象的字段数组
		for (Field f : bdcqztxx.getClass().getDeclaredFields()) {
			f.setAccessible(true);//表示反射对象是否抑制java语言访问
			String name = f.getName();//获取字段名称
			Object value = f.get(bdcqztxx);//获取对应字段的值
			Class<?> type = f.getType();//获取对应字段的类型
			System.out.println(type);
			//不需要判断的字段
			if ("FWBM".equals(name) ||
					"BDCDYH".equals(name) ||
					"BZ".equals(name) ||
					"XZQHDM".equals(name)) {
				System.out.println("当前不影响判断的字段为 "+name + ":" + value);
				continue;
			}
			System.out.println("当前影响判断的字段为 "+name + ":" + value);
			//需要判断的字段
			if ("1".equals(String.valueOf(value))) {
				//0为不可售
				sfks = 0;
				break;
			}
		}
		if (sfks == 1) {
			System.out.println("可售");
		}
		if (sfks == 0) {
			System.out.println("不可售");
		}
	}

就此完成!!!

java遍历对象属性,并将属性值不为空的取出

public void getValue(SelectIdListDto selectIdListDto){
        Field[] field = selectIdListDto.getClass().getDeclaredFields();        
        for(int j=0 ; j<field.length ; j++){    
            String name = field[j].getName();   
            name = name.substring(0,1).toUpperCase()+name.substring(1); 
            String type = field[j].getGenericType().toString();  
            if(type.equals("class java.lang.String")){   
                Method m;
                String value;
                try {
                    m = selectIdListDto.getClass().getMethod("get"+name);
                    value = (String) m.invoke(selectIdListDto);
                    if(value != null && !"".equals(value)){  
                        System.out.println(name);
                        System.out.println(value);
                    } 
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                } catch (SecurityException e) {
                    e.printStackTrace();
                }  
            }                   
        }
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java swing实现QQ账号密码输入框

    java swing实现QQ账号密码输入框

    这篇文章主要为大家详细介绍了Java swing实现QQ账号密码输入框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Java面试题冲刺第十七天--基础篇3

    Java面试题冲刺第十七天--基础篇3

    这篇文章主要为大家分享了最有价值的三道java基础面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 使用Sentinel滑动窗口实现限流和降级

    使用Sentinel滑动窗口实现限流和降级

    Sentinel 是一个开源的高可用性、高扩展性的实时流量控制框架,它可以用于保护服务稳定性,防止系统因为流量过大而崩溃,这篇文章我们所介绍的是滑动窗口,它是 Sentinel 实现限流和降级的重要组件之一,感兴趣的同学跟着小编来看看吧
    2023-09-09
  • IDEA报错:java 找不到符号图文解决过程

    IDEA报错:java 找不到符号图文解决过程

    这篇文章主要给大家介绍了关于IDEA报错:java 找不到符号解决的相关资料,运行项目时Idea报错,提示找不到符号,但是这个类在项目里是存在的,网上找了很多文章都没解决,浪费了一个下午终于弄好了,记录一下,需要的朋友可以参考下
    2023-08-08
  • 详解Maven多模块打包遇到的问题解决方法

    详解Maven多模块打包遇到的问题解决方法

    这篇文章主要介绍了详解Maven多模块打包遇到的问题解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • SWT(JFace) 体验之FontRegistry

    SWT(JFace) 体验之FontRegistry

    测试代码如下:
    2009-06-06
  • SpringBoot中使用Flyway进行数据库迁移的详细流程

    SpringBoot中使用Flyway进行数据库迁移的详细流程

    本文介绍了如何在Spring Boot项目中使用Flyway进行数据库迁移,Flyway通过SQL脚本管理数据库变更,支持自动执行和版本控制,避免了手动执行SQL脚本的错误和维护困难,需要的朋友可以参考下
    2025-02-02
  • Spring jackson原理及基本使用方法详解

    Spring jackson原理及基本使用方法详解

    这篇文章主要介绍了Spring jackson原理及基本使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Spring JPA事务管理与自定义操作实例解析(最新推荐)

    Spring JPA事务管理与自定义操作实例解析(最新推荐)

    在Spring框架中,数据持久化操作常常与事务管理紧密相关,本文将深入探讨Spring Data JPA中的事务管理机制,并结合具体实例,展示如何自定义事务行为以满足不同的业务需求,感兴趣的朋友一起看看吧
    2024-12-12
  • Java中spring读取配置文件的几种方法示例

    Java中spring读取配置文件的几种方法示例

    本篇文章中主要介绍了Java中spring读取配置文件的几种方法示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02

最新评论