这是java的泛型语法,E表示泛型具现时使用的类,而? extends E则表示E的子类或者E的实现。

一开始接触的问题是,为什么需要? extends E这样的语法?

例如一个List<Number> numbList的add方法自然可以接受Number的子类,包括Double或者Integer。所以在add的参数只需要是add(E)就可以了,不需要add(? extends E)。

这是因为addAll方法的需要,addAll(Collection<? exntends E>)在这个接口里,如果使用addAll(Collection<E>)是不接受List<Double>作为参数的,这是因为按照官方的说法,java的泛型是“invariant”的。一个List<Double>不是一个List<Number>,确实一个List<? extends Number>。

值得注意的是,数组不一样,一个Double[]是一个Number[]。

参考:http://stackoverflow.com/questions/2770264/what-is-the-difference-between-e-extends-number-and-number

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-06
  • 2021-06-24
  • 2021-07-19
  • 2022-12-23
  • 2022-03-03
  • 2021-11-30
猜你喜欢
  • 2021-11-19
  • 2022-12-23
  • 2021-09-18
  • 2022-12-23
  • 2021-06-21
  • 2022-01-25
  • 2021-09-02
相关资源
相似解决方案