首页 > 解决方案 > 将 JSON 脚本转换为 MAP 时使用的 java 中的 TypeReference 是什么

问题描述

在转换从 api 响应收到的 JSON 时,我遇到了 TypeRef,但我不确定它是如何工作的?任何图形表示或简化版本都会很好。我读过,但仍然不是很清楚。就像我们有地图来存储 <K,V> 但是 TypeRef 会对对象有什么不同呢?

TypeReference<HashMap<String,Object>> typeRef = new TypeReference<HashMap<String,Object>>() {};

标签: javajson

解决方案


TypeReference<T> implements Comparable<TypeReference<T>>jackon图书馆的一部分。这是com.fasterxml.jackson.core.type. 从API 文档

该泛型抽象类用于通过子类化获取完整的泛型类型信息;它必须转换为 ResolvedType 实现(由“databind”包中的 JavaType 实现)才能使用。课程基于来自 http://gafter.blogspot.com/2006/12/super-type-tokens.html的想法,其他想法(来自文章评论中提出的建议)是要求 Comparable 的虚假实现(任何这样的通用接口可以做到,只要它强制实现具有通用类型的方法)。以确保确实给出了 Type 参数。用法是通过子类化:这是实例化对泛型类型 List 的引用的一种方法:

TypeReference ref = new TypeReference<List>() { }; 它可以传递给接受 TypeReference 的方法,或者使用 TypeFactory 解析以获得 ResolvedType。

这主要用于反序列化 JSON 对象的 Generic 类型,例如 JAVA Collection 对象,如下所示:

public List<Double> getDoubleList() {

  return getObjectFromJson(new TypeReference<List<Double>>() {
  });
}


public <T> T getObjectFromJson(String jsonString, final TypeReference<T> typeReference) {
  try {
    return new ObjectMapper().readValue(jsonString, typeReference);
  } catch (JsonProcessingException e) {
    // TODO
  }
}

推荐阅读