从“Java Effective”示例重写的泛型方法的绑定不匹配

时间:2015-04-25 11:16:29

标签: java generics compiler-errors

class Main {
public static void main(String[] args) {
    List<Sub> list = new ArrayList<Sub>();

    Sub r = max(list);

    System.out.println(r);
}

static <T extends Comparable<? super T>> T max(List<? extends T> list) {
    return null;
}

private static class Super {
}

private static class Sub implements Comparable<Super> {
    public int compareTo(Super o) {
        return 0;
    }
}
}

任何人都可以告诉我为什么我在“Sub r = max(list)”行收到编译错误了吗?

我正在阅读Java Effective book,正如他们所说,我得到了该书中最复杂的方法声明。 这实际上就是max方法。

错误是:

Bound mismatch: "The generic method max(List< ? extends T>) of type Main is not applicable for the arguments (List< Main.Sub>). The inferred type Main.Sub is not a valid substitute for the bounded parameter < T extends Comparable< ? super T>>"

1 个答案:

答案 0 :(得分:4)

您的Sub课程必须延长Super

private static class Sub extends Super implements Comparable<Super> {