四、泛型的通配符
通配符:传入的类型有一个指定的范围,从而可以进行一些特定的操作
泛型中有三种通配符形式:
1.<?>无限制通配符
2.<? extends E> extends 关键字声明了类型的上界,表示参数化的类型可能是所指定的类型,或者是此类型的子类。
3.<? super E> super 关键字声明了类型的下界,表示参数化类型可能是指定类型,或者是此类型的父类。
无限制通配符 < ?>
要使用泛型,但是不确定或者不关心实际要操作的类型,可以使用无限制通配符(尖括号里一个问号,即 <?> ),表示可以持有任何类型。
? 和 Object 不一样,List<?> 表示未知类型的列表,而 List<Object> 表示任意类型的列表。
如传入个 List<String> ,这时 List 的元素类型就是 String,想要往 List 里添加一个 Object,这当然是不可以的。
上界通配符 < ? extends E>
在类型参数中使用 extends 表示这个泛型中的参数必须是 E 或者 E 的子类,这样有两个好处:
如果传入的类型不是 E 或者 E 的子类,编辑不成功
泛型中可以使用 E 的方法,要不然还得强转成 E 才能使用
下界通配符 < ? super E>
在类型参数中使用 super 表示这个泛型中的参数必须是 E 或者 E 的父类