有 Java 编程相关的问题?

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

java如何将字符串转换为泛型类型对象

我需要使用Jackson流式API反序列化以下文件

{ “key1”: {“value”:{…} },
  “key2”: {“value”:{…} },
  “key3”: {“value”:{…}},
   ....
  “keyn”: {“value”:{…}}  
}

然后使用kvmap将它们放到HashMap kvmap中。put(K,ValueClass); 我的理解是这样做的方式是:我必须使用jp解析K的字符串。getCurrentName(),然后使用:mapper获取ValueClass。readValue(jp,ValueClass.class)。i、 e:

private <K, V> HashMap<K, ValueClass<V>> loadFileStream(File f)
      ObjectMapper mapper = new ObjectMapper();
      HashMap<K, ValueClass<V>> kvmap  = ...
      ....
      current = jp.nextToken();
      if (current != JsonToken.START_OBJECT) {
          return with error information.
      }   
      while (jp.nextToken() != JsonToken.END_OBJECT) {
         String key = jp.getCurrentName();
         K = implement a function to convert from key to K;
         current = jp.nextToken();
         if (current == JsonToken.START_OBJECT) {
              ValueClass<V> value = mapper.readValue(jp, ValueClass.class);
              kvmap.put(K, value);
         }
         else {jp.skipChildren();}
      }
      return kvmap;
}

我的理解是,反序列化密钥的唯一方法是jp。getCurrentName(),因为它未作为json格式包含在{}中,所以我无法使用readValue()等格式获取它。对吗?然后 我的问题是如何实现从字符串键转换为泛型类型K的函数?我认为,如果readValue()可以将字符串转换为相应的泛型类型,理想情况下,我也应该能够将字符串键转换为泛型类型K。但是怎么做呢


共 (1) 个答案

  1. # 1 楼答案

    通常情况下,您可以使用ObjectMapper作为参数传递TypeReference

    final TypeReference typeRef = new TypeReference<Map<K, ValueClass<V>>>(){};
    
    return mapper.readValue(theFileObject, typeRef);
    

    这应该是现成的。如果没有,将抛出一个exeption并指出问题所在