多余的方法声明
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
}
}
我想知道这两个方法的声明在逻辑上有没有区别:
示例 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
}
}