3 回答

TA贡献1818条经验 获得超8个赞
尽管<?>应该是的捷径<? extend object>,但两者之间有微小的区别。 <?>是可辩护的,而<? extend object>不是。他们这样做的原因是为了更容易区分可确定类型。什么是像<? extends something>,<T>,<Integer>是nonreifiable。
例如,此代码将起作用
List aList = new ArrayList<>();
boolean instanceTest = aList instanceof List<?>;
但这给出了一个错误
List aList = new ArrayList<>();
boolean instancetest = aList instanceof List<? extends Object>;
有关更多信息,请阅读Maurice Naftalin的Java泛型和集合。

TA贡献1856条经验 获得超11个赞
<?>是的简写<? extends Object>。您可以阅读下面的共享链接以获取更多详细信息。
<?>
"?"表示任何未知类型,可以在代码中表示处的任何Type。如果不确定类型,请使用此通配符。
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>表示您可以传递对象或扩展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 –数字
Ref:
添加回答
举报