java如何遍歷對象中的所有屬性(字段)和類型
更新時間:2023年07月24日 14:12:30 作者:識你老鼠
這篇文章主要介紹了java如何遍歷對象中的所有屬性(字段)和類型問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
java遍歷對象中的所有屬性(字段)和類型
業(yè)務場景
一個房產交易系統(tǒng)中的業(yè)務需求,查詢房屋交易狀態(tài)接口,調用第三方接口返回一個vo對象,該對象的屬性主要是描述該房屋的交易情況,
比如是否抵押,是否被查封等,現(xiàn)在需要利用該對象的值決定返回給調用方的返回值。(現(xiàn)在一個對象中有很多個屬性,大部分屬性的值影響返回結果)
代碼:
vo對象:
@Data public class BDCQZTXX { private String fwbm;//房屋編碼 private String bdcdyh;//不動產單元號 private String xzqhdm;//行政區(qū)劃代碼 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;//是否在辦業(yè)務 private String bz;//備注
模擬業(yè)務處理(測試)
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腳本管理數據庫變更,支持自動執(zhí)行和版本控制,避免了手動執(zhí)行SQL腳本的錯誤和維護困難,需要的朋友可以參考下2025-02-02Spring JPA事務管理與自定義操作實例解析(最新推薦)
在Spring框架中,數據持久化操作常常與事務管理緊密相關,本文將深入探討Spring Data JPA中的事務管理機制,并結合具體實例,展示如何自定義事務行為以滿足不同的業(yè)務需求,感興趣的朋友一起看看吧2024-12-12