将类对象转换为地图的最快方法是什么? (因为我调用的一项服务需要一个映射作为参数。)此对象没有继承的成员。
谢谢。
答案 0 :(得分:0)
引用Mkyong.com 添加依赖项
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.3</version>
</dependency>
ObjectMapper oMapper = new ObjectMapper();
Student obj = new Student();
// object -> Map
Map<String, Object> map = oMapper.convertValue(obj, Map.class);
System.out.println(map);
答案 1 :(得分:0)
一种更快的方法是将toMap
方法添加到直接从class字段填充Map
的类中。这样可以避免反射……这很昂贵。
一种更快的方法是避免使用标准Map
类。例如:
public class MyClass implements Map<String, Object> {
private Integer field1;
private String field2;
...
public Object get(String name) {
switch (name) {
case "field1":
return field1;
case "field2":
return field2;
default:
return null;
}
}
// and so on.
}
只要所有字段都具有具有足够可见性的吸气剂,您可以通过包装器类执行类似的操作。
这比使用标准地图实现要快,因为您不必创建地图数据结构并添加所有字段值。
答案 2 :(得分:-1)
这是将对象转换为地图的方法
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;
}
答案 3 :(得分:-1)
添加缓存。
private static Map<Class,Field[]> classCache = new WeakHashMap();
public static Map<String, Object> parameters(Object obj) {
Map<String, Object> map = new HashMap<>();
for (Field field : classCache.computeIfAbsent(obj.getClass(), x -> x.getDeclaredFields())) {
field.setAccessible(true);
try { map.put(field.getName(), field.get(obj)); } catch (Exception e) { }
}
return map;
}