具有通配符的泛型不编译

时间:2017-01-17 21:38:22

标签: java generics interface wildcard

以下代码未编译:

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部分,那么代码会编译,但我需要它。我不明白为什么它不编译?对我来说看起来非常“安全”。

我应该采取哪些变通方法或设计变更来实现这一目标?

1 个答案:

答案 0 :(得分:3)

你的问题在线

public interface Request<BaseResponse> {

您已将BaseResponse作为类型参数,并有效地隐藏了同​​名的类。你可能想写

public interface Request<T extends BaseResponse> {

或类似的东西。