为了账号安全,请及时绑定邮箱和手机立即绑定

<?>和<?有什么区别?在Java泛型中扩展Object>?

<?>和<?有什么区别?在Java泛型中扩展Object>?

慕标琳琳 2019-09-21 14:20:33
我已经看过以前用来表示任何对象的通配符-但最近看到了以下用法:<? extends Object>由于所有对象都扩展对象,因此这两种用法是同义词吗?
查看完整描述

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泛型和集合。


查看完整回答
反对 回复 2019-09-21
?
呼唤远方

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 

//img1.sycdn.imooc.com//5d85c1630001d74f10570445.jpg

T –表示类型

E –表示元素

K –键

V –值

N –数字

Ref:

//img1.sycdn.imooc.com//5d85c16700018a9b04000277.jpg


查看完整回答
反对 回复 2019-09-21
  • 3 回答
  • 0 关注
  • 650 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信