Java 反射实现实体转Map时,父类元素丢失
public class BeanToMap { public static Map<String, Object> ConvertObjToMap(Object obj) { Map<String, Object> reMap = new HashMap<>(); if (obj == null) return null; List<Field> fields = new ArrayList<>(); List<Field> childFields; List<String> fieldsName = new ArrayList<>(); Class tempClass = obj.getClass(); while (tempClass != null) {//当父类为null的时候说明到达了最上层的父类(Object类). fields.addAll(Arrays.asList(tempClass.getDeclaredFields())); tempClass = tempClass.getSuperclass(); //得到父类,然后赋给自己 } childFields = Arrays.asList(obj.getClass().getDeclaredFields()); for (Field field : childFields) { fieldsName.add(field.getName()); } try { for (Field field : fields) { try { if (fieldsName.contains(field.getName())) { Field f = obj.getClass().getDeclaredField( field.getName()); f.setAccessible(true); Object o = f.get(obj); reMap.put(field.getName(), o); } else { Field f = obj.getClass().getSuperclass().getDeclaredField( field.getName()); f.setAccessible(true); Object o = f.get(obj); reMap.put(field.getName(), o); } } catch (Exception e) { e.printStackTrace(); } } } catch (SecurityException e) { e.printStackTrace(); } return reMap; } }
上述代码实现了实体转map,不过当实体是子类的时候,会出现异常,需要考虑到的问题是父类。
通过这种方式保证获取到父类的信息
obj.getClass().getSuperclass()