利用反射重构代码
程序员文章站
2022-05-19 17:07:50
...
一、需求
先看代码:
两个方法几乎一模一样,唯一的区别就是传入的对象不同
二、改造
利用反射,将对象映射成map,看代码:
public Map<String, Object> class2Map(Object obj) {
Class aClass = obj.getClass();
Field[] declaredFields = aClass.getDeclaredFields();
Map<String, Object> map = Maps.newHashMap();
for (int i = 0; i < declaredFields.length; i++) {
try {
Field field = declaredFields[i];
field.setAccessible(true);
String name = field.getName();
Object value = field.get(obj);
map.put(name, value);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
System.out.println(JSON.toJSONString(map));
return map;
}
//使用
classValve.forEach((k, v) -> properties.setProperty(k, v.toString()));
三、效果:
@Override
public void sender(String name, String type, List<String> users, Object obj) {
try {
if (type.equals(MsgEnum.EMAIL.getDesc())) {
emailHandler.sender(users, obj, name);
} else if (type.equals(MsgEnum.WECHAT.getDesc())) {
weChatMessageHandler.send(users, obj, name);
}
} catch (Exception e) {
log.error("MsgSenderServiceImpl:sender", e);
}
}
只需要传入Object对象,即可动态转换。
注意:
后来返现有现有的*,不需要自己通过反射去转对象了。
User user=new User();
user.setId("1");
user.setUsername("fuguowen");
Map<String, Object> object2Map = JSON.parseObject(JSON.toJSONString(user), new TypeReference<Map<String, Object>>() {
});
System.out.println(object2Map);