gpt4 book ai didi

spring - 嵌套具体化参数无法创建 ParameterizedTypeReference

转载 作者:行者123 更新时间:2023-12-01 14:23:35 25 4
gpt4 key购买 nike

我有以下带有具体化参数的内联函数来泛化 http 资源获取:

inline fun <reified N> getResources(): ResponseEntity<List<N>> {
val httpEntity = HttpEntity(null, httpHeaders)
val resourceStr = getResourceString<N>()
return rest.exchange(testContext.baseUrl + "/api/v1/$resourceStr", HttpMethod.GET,
httpEntity, typeRef<List<N>>())
}

我正在构建 ParameterizedTypeReferencetypeRef支持功能作为回答here :

inline fun <reified T : Any> typeRef(): ParameterizedTypeReference<T>{
return object : ParameterizedTypeReference<T>() {}
}

调用getResources<Employee>()时, ParameterizedTypeReference建有ParameterizedTypeReference.type.actualTypeArguments包含 java.util.List<? extends N>而不是 java.util.List<Employee> .

注意我正在传递 typeRef<List<N>> ,其中 N 被具体化,来自 getResources() typeRef() 期望的具体化类型 T但它似乎无法正确构建其类型。

为什么这不起作用?有解决办法吗?

更新:

我重构了代码以直接构建 ParameterizedTypeReference在第一个内联函数中,但我仍然得到它作为 java.util.List<? extends N> .

private inline fun <reified N> getResources(): ResponseEntity<List<N>> {
val httpEntity = HttpEntity(null, httpHeaders)
val resourceStr = getResourceString<N>()
return rest.exchange(testContext.baseUrl + "/api/v1/$resourceStr", HttpMethod.GET,
httpEntity, object : ParameterizedTypeReference<List<N>>() {})
}

最佳答案

Kotlin 似乎不支持使用具体化的参数作为泛型类型。

为了解决这个问题,我使用 Guava 生成一个 Type 对象并手动构建 ParameterizedTypeReference:

private fun <T : Any> listTypeRef(clazz: Class<T>): ParameterizedTypeReference<List<T>> {
val type = TypeToken.of(clazz).type
val make = ParameterizedTypeImpl.make(List::class.java, arrayOf(type), null)
return ParameterizedTypeReference.forType<T>(make) as ParameterizedTypeReference<List<T>>
}

然后我只是在 getResources() 函数中使用它传递嵌套类型的 java 类 (S::class.java):

inline fun <reified S : Any> getResources(): ResponseEntity<List<S>> {
val httpEntity = HttpEntity(null, httpHeaders)
val resourceStr = getResourceString<S>(null)
return rest.exchange(testContext.baseUrl + "/api/v1/$resourceStr", HttpMethod.GET,
httpEntity, listTypeRef(S::class.java))
}

关于spring - 嵌套具体化参数无法创建 ParameterizedTypeReference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52925087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com