多余的方法声明

redundant declaration of methods

我想知道这两个方法的声明在逻辑上有没有区别:

示例 1

public static <T extends Comparable<? super T>> T findMax(List<? extends T> list)

示例 2

public static <T extends Comparable<? super T>> T findMax(List<T> list)

有人告诉我<? extends T>这部分和<T>是等价的,而且通配符在第一个例子中是多余的,他建议我使用第二个例子中的代码。是吗?

它们不一样。

显示这个"someone"这个反证:)

class Scratch
{
    interface A extends Comparable<A> {}
    interface B extends A {}

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

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

    public static void main(String[] args)
    {
        List<B> listOfBs = new ArrayList<>();

        A foo = Scratch.<A>findMax(listOfBs);  // fine
        A bar = Scratch.<A>findMax2(listOfBs); // compiler error
    }
}