Java Can';t使用父类型作为变量类型,但接收子类型
您好,我正在使用Java Can';t使用父类型作为变量类型,但接收子类型,java,retrofit2,Java,Retrofit2,您好,我正在使用Java8。情况如下: 我有一个空接口AsyncResponse,如下所示: package com.personal.carrot.core.models; public interface AsyncResponse { } Call<AsyncResponse> request = repository.resolveCounts(payload); 我有一个模型APIResponse package com.personal.carrot.core.mo
Java8
。情况如下:
我有一个空接口AsyncResponse
,如下所示:
package com.personal.carrot.core.models;
public interface AsyncResponse {
}
Call<AsyncResponse> request = repository.resolveCounts(payload);
我有一个模型APIResponse
package com.personal.carrot.core.models;
import org.codehaus.jackson.annotate.JsonProperty;
public class APIResponse implements AsyncResponse {
@JsonProperty("numberOfFeatures")
public Long numberOfFeatures;
}
最后,我有一个服务,使用2
进行API响应:
public interface APIRepository {
@POST("MYURL")
Call<APIResponse> resolveCounts(@Body HashMap<String, String> body);
}
公共接口存储库{
@帖子(“MYURL”)
调用解析计数(@Body HashMap Body);
}
现在,当我调用APIRepository时,如下所示:
package com.personal.carrot.core.models;
public interface AsyncResponse {
}
Call<AsyncResponse> request = repository.resolveCounts(payload);
callrequest=repository.resolveCounts(有效负载);
我得到一个错误:
java:不兼容类型:Refught2.Call(com.personal.carrot.core.models.APIResponse)无法转换为Refught2.Call(com.personal.carrot.core.models.AsyncResponse)
它失败是因为您无法将
调用
分配给调用
。泛型类型是不变的
您可能必须使用APIResponse
作为变量的类型参数:
Call<APIResponse> request = repository.resolveCounts(payload);
callrequest=repository.resolveCounts(有效负载);
这并不是因为您不能将代码设计为使用接口
AsyncResponse
,而是因为(我在这里假定)框架使用返回类型来处理与内容类型相关的绑定。为什么它不起作用
与关于多态性的一般理解相反(这是您在这里试图实现的),它不适用于泛型
List<String> strList = new ArrayList();
List<Object> objectList = strList;
或者(我还没有试过):
Call@ernest_k不存在单实例JVM&这是一个编译时错误。如果使用CallSee:“Box和Box不是Box的子类型”,它是否有效?如果resolveCounts
返回一个调用
,则不能将其分配给调用
。另请参阅: