望着时间滴答滴答的流过,我不曾改变过 . . .

秋招之路4:泛型中的<? extends E>和<? super E>

<? extends E>

  1. ? 是继承于E的,用来限制元素的类型上限,?是E的子类或E
  2. 赋值:只能是E的子类给父类赋值。
  3. 写入:因为惧怕类型污染,只能写入null(null属于全类型)。
  4. 读取:咋读都可以

<? super E>

  1. ? 超类于E,用来限制元素的类型下限,?是E的父类或E
  2. 赋值:只能是E的父类给子类赋值
  3. 写入:可以添加E,E的子类,但是不能添加E的父类

原因:E的子类都可以向上转换为某一个?,
但是E的父类有很多,避免类型污染,不能随意添加。

  1. 读取:必须进行强制类型转换

PECS原则

当需要频繁取值,而不需要写值则使用" ? extends T "作为数据结构泛型。
相反,当需要频繁写值,而不需要取值则使用" ? super T "作为数据结构泛型。
又要频繁写又要频繁读,就别用泛型通配符。

posted @ 2020-02-17 12:35  whyaza  阅读(211)  评论(0编辑  收藏  举报