E 和 ? extends E的区别
和? extends E
這是java的泛型語法,E表示泛型具現(xiàn)時使用的類,而? extends E則表示E的子類或者E的實現(xiàn)。
一開始接觸的問題是,為什么需要? extends E這樣的語法?
例如一個List<Number> numbList的add方法自然可以接受Number的子類,包括Double或者Integer。所以在add的參數(shù)只需要是add(E)就可以了,不需要add(? extends E)。
這是因為addAll方法的需要,addAll(Collection<? exntends E>)在這個接口里,如果使用addAll(Collection<E>)是不接受List<Double>作為參數(shù)的,這是因為按照官方的說法,java的泛型是“invariant”的。一個List<Double>不是一個List<Number>,確實一個List<? extends Number>。
值得注意的是,數(shù)組不一樣,一個Double[]是一個Number[]。
參考:http://stackoverflow.com/questions/2770264/what-is-the-difference-between-e-extends-number-and-number
轉(zhuǎn)載于:https://www.cnblogs.com/zhanglanyun/archive/2012/12/07/2807541.html
總結(jié)
以上是生活随笔為你收集整理的E 和 ? extends E的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地表地形对地下温度及地表热流的影响
- 下一篇: Spring笔记2