我想知道這兩種方法的聲明是否存在邏輯差異:示例1public static <T extends Comparable<? super T>> T findMax(List<? extends T> list)示例2public static <T extends Comparable<? super T>> T findMax(List<T> list)有人告訴我,這部分<? extends T>相當于<T>第一個示例中的通配符,并且通配符是多余的,他建議我使用第二個示例中的代碼。是對的嗎?
1 回答

ABOUTYOU
TA貢獻1812條經驗 獲得超5個贊
他們不一樣。
向這個“某人”展示這個反證:)
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
}
}
添加回答
舉報
0/150
提交
取消