E代表Element,用于集合中的元素
T代表the type of object,表示某个类
K代表Key,V代表Value,用于键值对元素
<? super T> 是 Put First,适用于生产集合元素为主的场景。
可以往里面添加元素,但只能添加T以及子类对象。
<? extends T> 是Get First ,适用于消费集合元素为主的场景。
<? super T>表示类型下界
<? extends T>表示类型上界
无法进行add操作,除了null外,任何元素都不能被添加入<? extends T> ,可以返回带类型的元素,但只能返回T自身以及其父类对象,因为子类类型被擦除了。
类型擦除(type erasure)
Java 中的泛型基本上都是在编译器这个层次来实现的。在生成的 Java 字节代码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。这个过程就称为类型擦除。如在代码中定义的 List<Object> 和 List<String> 等类型,在编译之后都会变成 List。JVM 看到的只是 List,而由泛型附加的类型信息对 JVM 来说是不可见的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。