以下代码未编译:
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
部分,那么代码会编译,但我需要它。我不明白为什么它不编译?对我来说看起来非常“安全”。
我应该采取哪些变通方法或设计变更来实现这一目标?
答案 0 :(得分:3)
你的问题在线
public interface Request<BaseResponse> {
您已将BaseResponse
作为类型参数,并有效地隐藏了同名的类。你可能想写
public interface Request<T extends BaseResponse> {
或类似的东西。