分析:
方法 | 功能 |
---|---|
getFields() | 獲取所有public字段,包括父類字段 |
getDeclaredFields() | 獲取所有字段,public和protected和private,但是不包括父類字段 |
1.將實體類bean轉換成map(拿到屬性及屬性值put到map中):
public static Map<String,Object> objToMap(Object o) { Map<String, Object> map = Maps.newHashMap(); Field[] fields = o.getClass().getDeclaredFields(); for (Field field : fields) { try { field.setAccessible(true); map.put(field.getName(), field.get(o)); } catch (Exception e) { log.error("反射錯誤,錯誤字段名爲【{}】", field.getName(), e); } } return map; }
特點:作爲參數傳進來的bean對象如果有父類,那麼上面那個方法則不能獲取父類的屬性及屬性值,可如下操作:
通過bean.class.getSuperclass()拿到父類的class(以下能拿到子類及父類的所有私有屬性)
List<Field> fieldList = new ArrayList<>() ;
Class tempClass = Bean.class;
while (tempClass != null) {//當父類爲null的時候說明到達了最上層的父類(Object類).
fieldList.addAll(Arrays.asList(tempClass .getDeclaredFields()));
tempClass = tempClass.getSuperclass(); //得到父類,然後賦給自己
}
for (Field f : fieldList) {
Log.d("getAllFields","getFields---"+f.getName());
}