Java:将类对象转换为地图的最快方法是什么

时间:2019-12-31 04:07:49

标签: java

将类对象转换为地图的最快方法是什么? (因为我调用的一项服务需要一个映射作为参数。)此对象没有继承的成员。

谢谢。

4 个答案:

答案 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;
        }
相关问题