2 回答
TA贡献1777条经验 获得超10个赞
除了使用反射的技巧解决方案外,您还可以尝试jackson如下一行:
objectMapper.convertValue(o, Map.class);
一个测试用例:
@Test
public void testConversion() {
User user = new User();
System.out.println(MapHelper.convertObject(user));
}
@Data
static class User {
String name = "Jack";
boolean male = true;
}
// output: you can have the right type normally
// {name=Jack, male=true}
TA贡献1789条经验 获得超8个赞
这是你的做法:
import java.util.Map;
import java.util.HashMap;
import java.util.Map.Entry;
import java.lang.reflect.Field;
public class Main {
public int a = 3;
public String b = "Hello";
public static void main(String[] args) {
Map<String, Object> map = parameters(new Main());
for (Entry<String, Object> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
public static Map<String, Object> parameters(Object obj) {
Map<String, Object> map = new HashMap<>();
for (Field field : obj.getClass().getDeclaredFields()) {
field.setAccessible(true);
try { map.put(field.getName(), field.get(obj)); } catch (Exception e) { }
}
return map;
}
}
基本上,您使用反射来获取类中的所有字段。然后,您访问对象的所有这些字段。请记住,这仅适用于可从获取字段的方法访问的字段。
添加回答
举报