不能使用parent作为变量类型但仍接收子类型

iam*_*rot 5 java retrofit2

嗨,我正在与你合作java 8.以下是这种情况:

我有一个AsyncResponse像下面这样的空接口:

package com.personal.carrot.core.models;

public interface AsyncResponse {
}
Run Code Online (Sandbox Code Playgroud)

我有一个模特 APIResponse

package com.personal.carrot.core.models;

import org.codehaus.jackson.annotate.JsonProperty;

public class APIResponse implements AsyncResponse {

    @JsonProperty("numberOfFeatures")
    public Long numberOfFeatures;

}
Run Code Online (Sandbox Code Playgroud)

最后我有一个服务Retrofit2用来做我的API响应:

public interface APIRepository {
    @POST("MYURL")
    Call<APIResponse> resolveCounts(@Body HashMap<String, String> body);
}
Run Code Online (Sandbox Code Playgroud)

现在我调用APIRepository如下:

Call<AsyncResponse> request = repository.resolveCounts(payload);
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

java:不兼容类型:retrofit2.Call(com.personal.carrot.core.models.APIResponse)无法转换为retrofit2.Call(com.personal.carrot.core.models.AsyncResponse)

ern*_*t_k 1

它失败了,因为你无法分配Call<APIResponse>给 a Call<AsyncResponse>。泛型类型是不变的。

您可能必须使用APIResponse变量的类型参数:

Call<APIResponse> request = repository.resolveCounts(payload);
Run Code Online (Sandbox Code Playgroud)

这并不是因为您无法设计代码来使用该接口AsyncResponse,而是因为(我在这里假设)框架使用返回类型来处理与内容类型相关的绑定。