3 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
盡管<?>應(yīng)該是的捷徑<? extend object>,但兩者之間有微小的區(qū)別。 <?>是可辯護(hù)的,而<? extend object>不是。他們這樣做的原因是為了更容易區(qū)分可確定類型。什么是像<? extends something>,<T>,<Integer>是nonreifiable。
例如,此代碼將起作用
List aList = new ArrayList<>();
boolean instanceTest = aList instanceof List<?>;
但這給出了一個(gè)錯(cuò)誤
List aList = new ArrayList<>();
boolean instancetest = aList instanceof List<? extends Object>;
有關(guān)更多信息,請(qǐng)閱讀Maurice Naftalin的Java泛型和集合。

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
<?>是的簡寫<? extends Object>。您可以閱讀下面的共享鏈接以獲取更多詳細(xì)信息。
<?>
"?"表示任何未知類型,可以在代碼中表示處的任何Type。如果不確定類型,請(qǐng)使用此通配符。
ArrayList<?> unknownList = new ArrayList<Number>(); //can accept of type Number
unknownList = new ArrayList<Float>(); //Float is of type Number
注意: <?>表示任何意思。因此它可以接受不是從Object類繼承的Type 。
<? extends Object>
<? extends Object>表示您可以傳遞對(duì)象或擴(kuò)展Object類的子類。
ArrayList<? extends Number> numberList = new ArrayList<Number>(); //Number of subclass
numberList = new ArrayList<Integer>(); //Integer extends Number
numberList = new ArrayList<Float>(); // Float extends Number
T –表示類型
E –表示元素
K –鍵
V –值
N –數(shù)字
Ref:
添加回答
舉報(bào)