分析:
方法 | 功能 |
---|---|
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());
}