带有通配符的泛型无法编译

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> {

或类似的东西。