将 JsonObjectRequest 转换为请求
Cast JsonObjectRequest to Request
我通过 returns 通用请求类型的函数创建请求:
public final class SpecificRequestService extends RequestService<JSONObject> {
@Override
protected Request<JSONObject> getRequest() {
return new JsonObjectRequest(...);
}
}
父class抽象定义:
public abstract class RequestService<T> {
protected abstract Request<T> getRequest();
}
我收到一个不兼容的类型错误:
Required: Request <org.json.JSONObject>
Found: Request <?>
Hopwever,JsonObjectRequest
扩展了 JsonRequest<JSONObject>
,其中 JsonRequest<T>
又扩展了 Request<T>
。
为什么子class中的类型在抱怨?
我已尝试使用您描述的 class 层次结构的简单重建来重现您的问题,但我没有遇到编译错误。所以我假设您的案例中还缺少其他东西。
我在这里包含我的代码,以便您确认我们在同一页面上:
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
显然是内部匿名 class 覆盖导致了问题。我设法使用覆盖函数上的自我转换来修复它:
public final class SpecificRequestService extends RequestService<JSONObject> {
@Override
protected Request<JSONObject> getRequest() {
return (JsonObjectRequest) new JsonObjectRequest(...)
{...};
}
}
我不知道这个匿名的怪癖 classes!
我通过 returns 通用请求类型的函数创建请求:
public final class SpecificRequestService extends RequestService<JSONObject> {
@Override
protected Request<JSONObject> getRequest() {
return new JsonObjectRequest(...);
}
}
父class抽象定义:
public abstract class RequestService<T> {
protected abstract Request<T> getRequest();
}
我收到一个不兼容的类型错误:
Required: Request <org.json.JSONObject> Found: Request <?>
Hopwever,JsonObjectRequest
扩展了 JsonRequest<JSONObject>
,其中 JsonRequest<T>
又扩展了 Request<T>
。
为什么子class中的类型在抱怨?
我已尝试使用您描述的 class 层次结构的简单重建来重现您的问题,但我没有遇到编译错误。所以我假设您的案例中还缺少其他东西。
我在这里包含我的代码,以便您确认我们在同一页面上:
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
显然是内部匿名 class 覆盖导致了问题。我设法使用覆盖函数上的自我转换来修复它:
public final class SpecificRequestService extends RequestService<JSONObject> {
@Override
protected Request<JSONObject> getRequest() {
return (JsonObjectRequest) new JsonObjectRequest(...)
{...};
}
}
我不知道这个匿名的怪癖 classes!