Java泛型的通配符?(问号)是一种特殊的类型参数,用于表示未知的类型。通配符可以在使用泛型类型时提高代码的灵活性,使得一个泛型容器能够引用多种不同类型的泛型对象。主要有三种类型的通配符使用场景:无界通配符、有界通配符(上界和下界)。
?)无界通配符?表示任意类型,它的主要用途是在读取或操作集合时,表示你不关心集合中元素的具体类型。
- public void printList(List> list) {
- for (Object item : list) {
- System.out.println(item);
- }
- }
这里的List>表示一个未知类型元素的列表,printList方法可以接受任何类型的List对象。
有界通配符限制了未知类型的范围,包括上界通配符(? extends Type)和下界通配符(? super Type)。
? extends Type)上界通配符? extends Type表示类型的上限,它意味着任何继承自Type的类型都可以被接受。
- public void printNumbers(List extends Number> list) {
- for (Number num : list) {
- System.out.println(num);
- }
- }
这里的List extends Number>可以接受List、List等任何Number子类的列表。
? super Type)下界通配符? super Type表示类型的下限,它允许列表引用Type类型或任何Type的父类型。
- public void addNumbers(List super Integer> list) {
- list.add(10); // 可以添加Integer或其子类的实例
- }
这里的List super Integer>可以是List、List或List等。
T的数据,并且不能写入,可以使用? extends T(生产者)。T的数据,并且不需要读取,可以使用? super T(消费者)。?。