在具有通用参数的通用方法中使用Spring RestTemplate

在具有通用参数的通用方法中使用Spring RestTemplate,第1张

在具有通用参数的通用方法中使用Spring RestTemplate

不,这不是错误。这是

ParameterizedTypeReference
黑客工作方式的结果。

如果看一下它的实现,它会使用

Class#getGenericSuperclass()
哪些状态

返回表示该类表示的实体的直接超类的Type(class, interface, primitive type or void)。

如果超类是参数化类型,则Type返回的对象必须准确反映源代码中使用的实际类型参数。

所以,如果你使用

new ParameterizedTypeReference<ResponseWrapper<MyClass>>() {}

它将准确地返回

Typefor ResponseWrapper<MyClass>

如果你使用

new ParameterizedTypeReference<ResponseWrapper<T>>() {}

它会准确地返回

Type
for,
ResponseWrapper<T>
因为那是它在源代码中的样子。

当Spring看到T实际上是一个

TypeVariable
对象时,它不知道要使用的类型,因此它使用其默认值。

你不能使用ParameterizedTypeReference提议的方式,就接受任何类型的意义而言,使其成为通用的。考虑编写映射到该类的预定义Map键的with键。

ClassParameterizedTypeReference

你也可以继承

ParameterizedTypeReference
并覆盖其
getType
方法返回一个适当的创建
ParameterizedType
,通过IonSpin的建议。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5037084.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存