首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cast JsonObjectRequest请求

Cast JsonObjectRequest请求
EN

Stack Overflow用户
提问于 2017-03-09 18:55:16
回答 2查看 84关注 0票数 1

我通过一个返回一般请求类型的函数创建一个请求:

代码语言:javascript
复制
public final class SpecificRequestService extends RequestService<JSONObject> {
    @Override
    protected Request<JSONObject> getRequest() {
        return new JsonObjectRequest(...);
    }
}

父类是抽象定义的:

代码语言:javascript
复制
public abstract class RequestService<T> {
    protected abstract Request<T> getRequest();
}

我收到一个不兼容的类型错误:

Required: Request Found: Request

JsonObjectRequest扩展了JsonRequest<JSONObject>,而JsonRequest<T>又扩展了Request<T>

为什么子类中的类型会抱怨?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-13 18:16:35

显然,内部匿名类覆盖导致了问题。我成功地在overriden函数上使用了一个自转换来修复它:

代码语言:javascript
复制
public final class SpecificRequestService extends RequestService<JSONObject> {
    @Override
    protected Request<JSONObject> getRequest() {
        return (JsonObjectRequest) new JsonObjectRequest(...)
            {...};
    }
}

我不知道这个特别奇怪的匿名课程!

票数 0
EN

Stack Overflow用户

发布于 2017-03-13 15:51:51

我试图使用您描述的类层次结构的赤裸裸的重新设计来重现您的问题,您所描述的是I‘t get’s编译错误。所以我假设你的案子里还有别的东西不见了。

我在这里包含了我的代码,这样您就可以确认我们在同一个页面上:

代码语言:javascript
复制
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没有编译错误

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42703324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档