У меня есть следующая встроенная функция с уточненным параметром для обобщения получения 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>>())
}
И я создаю ParameterizedTypeReference
с функцией поддержки typeRef
, как ответили здесь:
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()
до овеществленного типа T, ожидаемого typeRef()
, но, похоже, он не может правильно построить его тип.
Почему это не работает?Любой обходной путь?
ОБНОВЛЕНИЕ:
Я реорганизовал код для прямой сборки 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>>() {})
}