Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么编译类型不匹配?使用接口时扩展_Java_Generics - Fatal编程技术网

Java 为什么编译类型不匹配?使用接口时扩展

Java 为什么编译类型不匹配?使用接口时扩展,java,generics,Java,Generics,有人能帮我解释一下为什么这是类型不匹配吗 public interface ResponseContainer<T extends ResponsePayload<T>> { public T getResponsePayload(); } public interface ResponsePayload<T> { public T getPayload(); } protected abstract <T> Class

有人能帮我解释一下为什么这是类型不匹配吗

public interface ResponseContainer<T extends ResponsePayload<T>> {

    public T getResponsePayload();

}

public interface ResponsePayload<T> {

    public T getPayload();

}

protected abstract <T> Class<? extends ResponseContainer<? extends ResponsePayload<T>>> getResponseClazz(Class<? extends ResponsePayload<T>> responseClazz);
公共接口响应容器{
公共T getResponsePayload();
}
公共接口响应payload{
公共T getPayload();
}

受保护的抽象类您需要更改
getResponseClazz
的返回类型。您还应该更改泛型定义以避免使用通配符。签名应该是

protected abstract <T extends ResponsePayload<T>> ResponseContainer<T> getResponseContainer(Class<T> responseClazz);
受保护的抽象ResponseContainer getResponseContainer(类responseClazz);

编辑多亏了Thilo,方法名称发生了更改

您需要更改
getResponseClazz
的返回类型。您还应该更改泛型定义以避免使用通配符。签名应该是

protected abstract <T extends ResponsePayload<T>> ResponseContainer<T> getResponseContainer(Class<T> responseClazz);
受保护的抽象ResponseContainer getResponseContainer(类responseClazz);

EDIT由于Thilo,方法名称发生了更改

您返回的是
,但变量的类型是
ResponseContainer
错误消息说您的
getResponseClazz
方法返回的对象类型是
<代码>类
不是
响应容器
的子类。(如果从错误消息中删除所有泛型类型,就会更清楚:
类型不匹配:无法从类转换为ResponseContainer
)您正在返回
Class
但变量的类型为
ResponseContainer
错误消息说您的
getResponseClazz
方法返回类型为
Class
的对象<代码>类不是
响应容器
的子类。(如果从错误消息中删除所有泛型类型,就会更清楚:
类型不匹配:无法从类转换为ResponseContainer
)由于没有返回类,请将方法名称更改为
getResponseContainer
getResponseContainerForPayloadClass
。感谢您的快速响应。我的tryThis()实际上有点误导,因为我确实想返回一个类。它打算用于RestTemplate
public ResponseEntity postForEntity(字符串url、对象请求、类responseType、对象…uriVariables)
方法。但是我可以尝试在返回的对象上使用您建议的getClass()方法,并禁止将其传递给RestEntity的类型安全警告。另外,还可以将方法名称更改为类似
getResponseContainer
getResponseContainerForPayloadClass
,因为您没有返回类。感谢您的快速响应。我的tryThis()实际上有点误导,因为我确实想返回一个类。它打算用于RestTemplate
public ResponseEntity postForEntity(字符串url、对象请求、类responseType、对象…uriVariables)
方法。但是我可以尝试使用您建议的方法对返回的对象使用getClass(),并抑制将其传递给RestEntity的类型安全警告。。