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()实际上有点误导,因为我确实想返回一个类。它打算用于RestTemplatepublic ResponseEntity postForEntity(字符串url、对象请求、类responseType、对象…uriVariables)
方法。但是我可以尝试在返回的对象上使用您建议的getClass()方法,并禁止将其传递给RestEntity的类型安全警告。另外,还可以将方法名称更改为类似getResponseContainer
或getResponseContainerForPayloadClass
,因为您没有返回类。感谢您的快速响应。我的tryThis()实际上有点误导,因为我确实想返回一个类。它打算用于RestTemplatepublic ResponseEntity postForEntity(字符串url、对象请求、类responseType、对象…uriVariables)
方法。但是我可以尝试使用您建议的方法对返回的对象使用getClass(),并抑制将其传递给RestEntity的类型安全警告。。