java - 方法的冗余声明

标签 java generics bounded-wildcard

我想知道这两个方法的声明是否有逻辑上的差异:

示例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>第一个示例中的通配符是多余的,他建议我使用第二个示例中的代码。是这样吗?

最佳答案

它们不一样。

向这个“某人”展示这个反证:)

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

关于java - 方法的冗余声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57980360/

相关文章:

具有有界通配符的泛型类型的 Java 泛型集合

java - Mysql连接线程是否安全

java - 什么是 PECS(生产者扩展消费者 super )?

java - Netbeans 7.2 中的调试 View

c# - 接口(interface)接口(interface) <T> : T

java - Spring:通用注入(inject)不起作用

java - List<Number> 和 List< 有什么区别?扩展号码>?

java - 泛型通配符的正确使用

java - 我的 Hibernate 拦截器不工作

java - 文件不是用 Java 创建的