我通过一个返回一般请求类型的函数创建一个请求:
public final class SpecificRequestService extends RequestService<JSONObject> {
@Override
protected Request<JSONObject> getRequest() {
return new JsonObjectRequest(...);
}
}父类是抽象定义的:
public abstract class RequestService<T> {
protected abstract Request<T> getRequest();
}我收到一个不兼容的类型错误:
Required: Request Found: Request
JsonObjectRequest扩展了JsonRequest<JSONObject>,而JsonRequest<T>又扩展了Request<T>。
为什么子类中的类型会抱怨?
发布于 2017-03-13 18:16:35
显然,内部匿名类覆盖导致了问题。我成功地在overriden函数上使用了一个自转换来修复它:
public final class SpecificRequestService extends RequestService<JSONObject> {
@Override
protected Request<JSONObject> getRequest() {
return (JsonObjectRequest) new JsonObjectRequest(...)
{...};
}
}我不知道这个特别奇怪的匿名课程!
发布于 2017-03-13 15:51:51
我试图使用您描述的类层次结构的赤裸裸的重新设计来重现您的问题,您所描述的是I‘t get’s编译错误。所以我假设你的案子里还有别的东西不见了。
我在这里包含了我的代码,这样您就可以确认我们在同一个页面上:
abstract class A<T> {
public abstract R<T> getR();
}
final class B extends A<X> {
public R<X> getR() {
return new E();
}
}
class D<T> extends R<T> {};
class E extends D<X> {};
class R<T> {}
class X {};使用javac 1.8.x没有编译错误
https://stackoverflow.com/questions/42703324
复制相似问题