泛型:为何List<Driver>非List<Person>子类型- 创意小软件开发要塞 ...

The problem with that intuition is that it assumes that collections don’t change.
Our instinct takes these things to be immutable.
For example, if the department of motor vehicles supplies a list of drivers to the census
bureau, this seems reasonable. We think that a List<Driver> is a List<Person>,
assuming that Driver is a subtype of Person. In fact, what is being passed is a copy
of the registry of drivers. Otherwise, the census bureau could add new people who are
not drivers into the list, corrupting the DMV’s records.

?

?

我们直觉认为集合是不可变的,因此直觉倾向于认同X<Integer>是X<Number>的子类型

举例,假设 机动车部门提供了一份驾驶员名单给人口登记局,这貌似是合理的。
我们认为List<Driver> 就是 List<Person>,假设Driver是Person的子类型的话。
但实际上被提交的只是一份驾驶员的登记簿拷贝而已(意思就 是 是可以再改变的),如果不是,人口登记局就可以将那些不是驾驶员的人再加入到这个驾驶员列表中,破坏了机动车部门的记录。

?

这里说的集合不可变,是指集合类型不可变,如果集合类型可变,则X<Integer>不能是X<Number>的子类型

{zx1}评论

  • 谢谢你的回复,在你启发下我去debug了下程序,的确只有在read()方法的时候当 ...
    -- by

  • 回楼下huayurei:??? 原来的认识是有问题的, 看BufferedRead ...
    -- by

  • wentao365 写道 return obj; 是不是写错了?这里retur ...
    -- by

  • 这个解释是有可能会引起异常,偏偏我怎么设置都不产生异常,搞了我半天都没明白这个ma ...
    -- by

  • return obj; 是不是写错了?
    -- by
郑重声明:资讯 【泛型:为何List<Driver>非List<Person>子类型- 创意小软件开发要塞 ...】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——