有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将映射转换为对象

我有一个Map对象,Map中的数据如下

col1 -> data1, col2 -> data2, col3 -> data3 ...

是否可以将此映射转换为类似Java的对象

class MapObj {

    String col1 = "data1";
    String col2 = "data2";
    String col3 = "data3";

}

共 (6) 个答案

  1. # 1 楼答案

    地图上有固定的命名条目吗?如果是这样的话,您可以直接创建MapObj类,并通过说myMapObj.col1 = myMap.get("col1");等等来分配这三个字段

    但是暂时从这个问题退一步,你想解决的更大的问题是什么?地图本身实际上已经是这个数据的一个非常方便的容器,所以也许你可以将地图用于你计划使用MapObj的相同目的

  2. # 2 楼答案

    小坚果。填充(条目、地图)

  3. # 3 楼答案

    使用杰克逊

    import com.fasterxml.jackson.databind.ObjectMapper;
    
    public class Foo {
    
      {
        ObjectMapper objectMapper = new ObjectMapper();
        YourObject obj = objectMapper.convertValue(YourMap, YourObject.class);
      }
    }
    
  4. # 4 楼答案

    虽然可以在运行时使用自定义类装入器创建类,但这相对来说毫无意义。如何访问这些字段(反射和其他动态创建的类除外)

  5. # 5 楼答案

    我不知道有任何预先制作的lib可以为您实现这一点,但使用java.lang.reflectAPI应该非常简单。特别是字段#set*方法。当然,您需要有一个预定义的类,其中定义了字段(键)

  6. # 6 楼答案

    我认为把一堆映射值放到一个类中没有任何意义。 如果您想要静态访问,为什么不尝试相反的方法:

    class MapAccess {
      Map<String, String> backingMap = ...
    
      public String getCol1() {
        return backingMap.get("col1");
      }
    
      public String getCol2() {
        return backingMap.get("col2");
      }
    
      public String getCol3() {
        return backingMap.get("col3");
      }
    }
    

    这样,您的应用程序就不需要了解地图,也不会因为反射而迷路