带有通配符的泛型无法编译
Generics with wildcard not compiling
以下代码未编译:
public class Example {
public void method() {
Callback<BaseResponse> br = null;
Request<? extends BaseResponse> req = null;
req.startRequest(br); //compile-time error here!!
}
public interface Callback<T> {
void onResponse (T response);
void onFailure (String error, int code);
void onFailure (Throwable t);
}
public static class BaseResponse {
public String status;
}
public interface Request<BaseResponse> {
void startRequest(Callback<BaseResponse> callback);
}
}
如果我去掉 ? extends
部分,那么代码可以编译,但我需要它。我不明白为什么它不编译?在我看来 "type safe" 非常完美。
我应该采取哪些解决方法或设计更改才能使其正常工作?
您的问题在线
public interface Request<BaseResponse> {
您将 BaseResponse
设为类型参数,并有效地隐藏了同名的 class。你可能打算写
public interface Request<T extends BaseResponse> {
或类似的东西。
以下代码未编译:
public class Example {
public void method() {
Callback<BaseResponse> br = null;
Request<? extends BaseResponse> req = null;
req.startRequest(br); //compile-time error here!!
}
public interface Callback<T> {
void onResponse (T response);
void onFailure (String error, int code);
void onFailure (Throwable t);
}
public static class BaseResponse {
public String status;
}
public interface Request<BaseResponse> {
void startRequest(Callback<BaseResponse> callback);
}
}
如果我去掉 ? extends
部分,那么代码可以编译,但我需要它。我不明白为什么它不编译?在我看来 "type safe" 非常完美。
我应该采取哪些解决方法或设计更改才能使其正常工作?
您的问题在线
public interface Request<BaseResponse> {
您将 BaseResponse
设为类型参数,并有效地隐藏了同名的 class。你可能打算写
public interface Request<T extends BaseResponse> {
或类似的东西。