java - 不能将父类型用作变量类型,但仍可以接收子类型

标签 java retrofit2

您好,我正在使用 java 8。案例如下:

我有一个空接口(interface)AsyncResponse,如下所示:

package com.personal.carrot.core.models;

public interface AsyncResponse {
}

我有一个模型APIResponse

package com.personal.carrot.core.models;

import org.codehaus.jackson.annotate.JsonProperty;

public class APIResponse implements AsyncResponse {

    @JsonProperty("numberOfFeatures")
    public Long numberOfFeatures;

}

最后,我有了一个使用 Retrofit2 来生成 API 响应的服务:

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

现在,当我像下面这样调用 APIRepository 时:

Call<AsyncResponse> request = repository.resolveCounts(payload);

我得到一个错误:

java: incompatible types: retrofit2.Call (com.personal.carrot.core.models.APIResponse) cannot be converted to retrofit2.Call(com.personal.carrot.core.models.AsyncResponse)

最佳答案

失败是因为您无法分配 Call<APIResponse>Call<AsyncResponse> .通用类型是不变的。

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

Call<APIResponse> request = repository.resolveCounts(payload);

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

关于java - 不能将父类型用作变量类型,但仍可以接收子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54340102/

相关文章:

java - 将二叉搜索树转换为 XML

java - ActionBarSherlock 和另一个项目对版本 4 的支持存在冲突

java - 改造 - 尝试获取 response.body 时出现 JsonSyntaxException

Kotlin 为什么尽管进行空检查仍需要非空断言

java - BasicDataSource默认使用连接池吗?

java - 查找什么程序正在使用远程计算机上的端口

java - 套接字异常 : Connection reset while FTP upload

java - 使用 Retrofit Android 获取带参数的请求

android - 将标签设置为翻新调用,以便稍后通过标签取消

android - 我应该如何使用改造来获取数组下的图像