kotlin - 类型推断失败。预期类型不匹配

标签 kotlin generics covariance

下面的代码显示该错误。类型推断失败。预期类型不匹配必需:Response<BaseResponse<Any>>! 找到了:Response<BaseResponse<RetriveUserInfoResponse>!>!

`when`( mockIOnboardingService.validateCustomerIdentity(customerType.toLowerCase(), ValidateCustomerRequest(customerId, documentType, "243546", tyc)))
.thenReturn(Response.success(BaseResponse(payload = RetriveUserInfoResponse("+5689765432")))) //--> Here the error
这是validateCustomerIdentity方法
@POST(ApiConstants.bffOnboardingPath + ApiConstants.pathRetriveUserInfo)
    suspend fun validateCustomerIdentity(
        @Header(ApiConstants.headerXflowService) customerType : String,
        @Body body: ValidateCustomerRequest
    ): Response<BaseResponse<Any>>
如您所见,它返回BaseResponse<Any>。为什么Android Studio向我显示BaseResponse<RetriveUserInfoResponse>!错误
这是RetrieveUserInfoResponse数据类
data class RetriveUserInfoResponse(
    @SerializedName("phone")
    val phone: String
)

最佳答案

这个问题是Response.success(BaseResponse(payload = RetriveUserInfoResponse("+5689765432")))生成了Response<BaseResponse<RetriveUserInfoResponse>>,它与Response<BaseResponse<Any>>的类型(或子类型)不同。
您可以通过将RetriveUserInfoResponse转换为Any来解决此问题:

Response.success(BaseResponse(payload = RetriveUserInfoResponse("+5689765432") as Any))
或者通过将validateCustomerIdentity()的返回类型更改为Response<out BaseResponse<out Any>>,这是可行的,因为Response<BaseResponse<RetriveUserInfoResponse>>Response<out BaseResponse<out Any>>的子类:
@POST(ApiConstants.bffOnboardingPath + ApiConstants.pathRetriveUserInfo)
suspend fun validateCustomerIdentity(
    @Header(ApiConstants.headerXflowService) customerType : String,
    @Body body: ValidateCustomerRequest
): Response<out BaseResponse<out Any>>

关于kotlin - 类型推断失败。预期类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64623155/

相关文章:

android - 有没有办法在 fragment 中使用Anko commons?

java - 在 Java 中重写泛型类的方法时返回类型不兼容

java - 泛型方法,等式约束

c# - 使用字典和泛型创建嵌套的 JSON 可序列化对象结构时,.NET 中的 C# 协方差存在问题

c++ - 有没有办法转发声明协方差?

c# - 通用类协方差

android - 使用改造调用添加自签名证书

compilation - 错误:找不到或加载主类Hello.class

java - 是否可以使用 f 有界量化在默认实现的通用接口(interface)中返回 "this"

java - 线程 "main"io.micronaut.context.exceptions.DependencyInjectionException : Failed to inject value for parameter of class 中的异常