java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java遍历对象中的所有属性和类型

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();
                }  
            }                   
        }
    }

总结

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

您可能感兴趣的文章:
阅读全文