我想知道这两个方法的声明是否有逻辑上的差异:
示例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/