E 和 ? extends E的区别
和? extends E
這是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
轉載于:https://www.cnblogs.com/zhanglanyun/archive/2012/12/07/2807541.html
總結
以上是生活随笔為你收集整理的E 和 ? extends E的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地表地形对地下温度及地表热流的影响
- 下一篇: HDU1054+最小顶点覆盖