java如何遍历对象中的所有属性(字段)和类型
作者:识你老鼠
这篇文章主要介绍了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();
}
}
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
