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();
}
}
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot中使用Flyway进行数据库迁移的详细流程
本文介绍了如何在Spring Boot项目中使用Flyway进行数据库迁移,Flyway通过SQL脚本管理数据库变更,支持自动执行和版本控制,避免了手动执行SQL脚本的错误和维护困难,需要的朋友可以参考下2025-02-02
Spring JPA事务管理与自定义操作实例解析(最新推荐)
在Spring框架中,数据持久化操作常常与事务管理紧密相关,本文将深入探讨Spring Data JPA中的事务管理机制,并结合具体实例,展示如何自定义事务行为以满足不同的业务需求,感兴趣的朋友一起看看吧2024-12-12


最新评论