1 List 、 List 、 List<?>的区别
- List:可以在集合中装入任何对象。但是在正常情况下,一般集合中只存放一种元素。
- List: 可以将任意对象装入List集合中,简单的可以看成和第一种是一样的。
- List<?>: 问号在正则表达式中可以匹配任何字符,List< ?>称为通配符集合。可以接受任何类型的集合引用赋值,不能 添加 任何元素,但可以remove和clear,并非immutable集合.List<?>一般作为参数来接受外部集合,或者返回一个不知道具体元素类型的集合。
2 List,List<? extends T>,List<? super T>的区别
- List< T>: 最大的问题就是只能放置T这一种类型.
- List<? extends T>: 可以放置多种受泛型约束的类型,更大程度表示Get First,适用于消费集合元素为主的场景.
- <? extends T> 可以赋值给T以及T子类集合,上界为T.取出来的类型带有泛型限制,向上转型为T。null可以表示任何类型,**除了null外,任何元素元素都不能添加到<? extends T> 集合中。**
- List<? super T>:可以放置多种受泛型约束的类型,更大程度表示Put First,适用于生产集合元素为主的场景.
** <? super T>:可以赋值给任何T以及T的父类类型,下界为T。只能添加T及子类<? extends T>中**。