#kotlin #generics #covariance
#kotlin #общие #ковариация
Вопрос:
Приведенный ниже код показывает ошибку. Ошибка вывода типа. Требуемое ожидаемое несоответствие типов: 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
)
Ответ №1:
Эта проблема заключается в том, что Response.success(BaseResponse(payload = RetriveUserInfoResponse(" 5689765432")))
создается a Response<BaseResponse<RetriveUserInfoResponse>>
, который не является тем же типом (или подтипом) Response<BaseResponse<Any>>
.
Вы можете исправить это, приведя RetriveUserInfoResponse
к Any
:
Response.success(BaseResponse(payload = RetriveUserInfoResponse(" 5689765432") as Any))
Или, альтернативно, путем изменения возвращаемого типа validateCustomerIdentity()
to 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>>