一切福田,不離方寸,從心而覓,感無不通。

fastJSON,使用TypeReference处理复杂的泛型对象

解析JSON, 并将其转换为对应的数据结构。

例如,简单对象,或者复杂的泛型对象

 

普通对象直接转换

 

如果是Map带有泛型的对象,直接转换则格式不正确

 

使用 TypeReference

 

TypeReference 使用的两种方式,有参或者无参

例子: EnjoyResponseDTO<EnjoyPageResponseDataDTO<Long>> result = JSONObject.parseObject(str, new TypeReference<EnjoyResponseDTO<EnjoyPageResponseDataDTO<Long>>>(){});

等价于:EnjoyResponseDTO<EnjoyPageResponseDataDTO<T>> result = JSONObject.parseObject(str, new TypeReference<EnjoyResponseDTO<EnjoyPageResponseDataDTO<T>>>(Long.class){});

上面的 无参 构造方法 里面 获取了 参数泛型 (ParameterizedType),后面的 有参 构造方法 用参数 替换了 参数泛型中是 泛型变量 里面的 内容。

如果参数中有编译时未知的,执行时才知道的泛型(一般是用来继承中使用泛型),则使用有参构造方法就很有必有了,可以在使用有参的构造之前,获取实际的泛型,作为参数构造出TypeReference

如果 T 是 泛型变量 , 没传后面的修饰参数 T 会被识别成 T 的上边界( 根据 T的定义 如果: <T extends Number> T 被识别为Number,如果是<T> T被识别为 Object)

以下示例为运行未知泛型使用方式

 

————————————————
版权声明:本文为CSDN博主「飘落的秋风」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/D939030515/article/details/108741983