很多情況下,map對應的屬性字段需要轉化為model類的屬性字段,前幾天工作中需要將四五十個對應字段轉化為bean物件的字段,如果單純的考get/set進行重複**的封裝,太枯燥又繁瑣,現使用動態反射的方式對所有字段進行批量轉化。但前提是兩者的欄位名得保持一致才行。
獻上工具類**:
/**
* 將map物件通過反射機制轉換成bean物件
*
* @param mapresult 存放資料的map物件
* @param clazz 待轉換的class
* @return 轉換後的bean物件
* @throws exception 異常
*/
public static object maptobean(hashmapmapresult, class<?> clazz) throws exception catch(nosuchmethodexception e)
}
}
return obj;
}/**
* 將object型別的值,轉換成bean物件屬性裡對應的型別值
*
* @param value object物件值
* @param fieldtypeclass 屬性的型別
* @return 轉換後的值
*/
private static object convertvaltype(object value, class<?> fieldtypeclass) else if(integer.class.getname().equals(fieldtypeclass.getname())
|| int.class.getname().equals(fieldtypeclass.getname())) else if(float.class.getname().equals(fieldtypeclass.getname())
|| float.class.getname().equals(fieldtypeclass.getname())) else if(double.class.getname().equals(fieldtypeclass.getname())
|| double.class.getname().equals(fieldtypeclass.getname())) else
return retval;
}
/**
* 獲取指定欄位名稱查詢在class中的對應的field物件(包括查詢父類)
*
* @param clazz 指定的class
* @param fieldname 欄位名稱
* @return field物件
*/
private static field getclassfield(class<?> clazz, string fieldname)
field declaredfields = clazz.getdeclaredfields();
for (field field : declaredfields)
}
class<?> superclass = clazz.getsuperclass();
if(superclass != null)
return null;
}
測試的情況,大家可以寫個map放入幾個屬性,另外寫個bean類,測試下。我測試完全符合自己的需求。
有需要的拿去用吧!
利用反射將map值set進對應的實體中
前幾天呼叫第三方應用,其中的乙個是獲取人員詳細資訊的介面,欄位說多不多,說少也不少,我就想著懶得get再set了。仔細觀察了一下,發現返回的型別是map型別,而且value基本上都是string型別。即使該物件裡面還有實體,也是map型別,因此,就想到了用反射來賦值對應實體 public class...
利用反射將實體類物件轉成Map
在我們程式設計的過程中往往會用到反射,利用反射有時候可以更容易的做到一些事情,下面就說乙個反射的實際應用場景吧,就是將object轉化成乙個map,object裡的屬性名對應map的key,object裡的屬性值對應map的value public static mapobjecttomap obj...
利用反射獲取類的所有字段
以下是利用反射獲取類refpoint中所有的字段。一,refpoint類 public class refpoint public class class02 二,列印出所有類refpoint中的所有字段 refpoint refpoint01 new refpoint 3 type typeobj...