🤖
AI审核中

Java 泛型的类型通配符

文章摘要

类型通配符用于在泛型中表示未知或受限的元素类型。 - `<?>` 表示元素类型未知的 List,是所有具体泛型 List 的父类,但不能向其中写入元素。 - `<? extends T>` 表示元素类型为 T 或其子类的 List,只能读取元素,写入受限。 - `<? super T>` 表示元素类型为 T 或其父类的 List,可安全写入 T 类型元素,读取时只能得到 Object。 文章通过 `GenericDemo` 示例演示了三种通配符的声明方式及合法/非法的赋值情况,帮助理解它们在类型安全和灵活性上的作用。

类型通配符的作用
为了表示各种泛型List的父类,可以使用类型通配符
类型通配符的分类

  • 类型通配符:<?>
    List<?>:表示元素类型未知的List,它的元素可以匹配任何的类型
    这种带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加到其中
  • 类型通配符上限:<? extends 类型>
    List<? extends Number>:它表示的类型是Number或者其子类型
  • 类型通配符下限:<? super 类型>
    List<? super Number>:它表示的类型是Number或者其父类型

类型通配符的基本使用

public class GenericDemo {
        public static void main(String[] args) { 
                //类型通配符:<?>
                List<?> list1 = new ArrayList<Object>(); 
                List<?> list2 = new ArrayList<Number>(); 
                List<?> list3 = new ArrayList<Integer>(); 
                System.out.println("--------"); 

                //类型通配符上限:<? extends 类型>
                // List<? extends Number> list4 = new ArrayList<Object>();
                List<? extends Number> list5 = new ArrayList<Number>();
                List<? extends Number> list6 = new ArrayList<Integer>(); 
                System.out.println("--------"); 

                //类型通配符下限:<? super 类型>
                List<? super Number> list7 = new ArrayList<Object>(); 
                List<? super Number> list8 = new ArrayList<Number>();
                // List<? super Number> list9 = new ArrayList<Integer>(); 

        } 
}
0 条评论

如果你觉得文章对你有帮助,那就请作者喝杯咖啡吧

评论区 0

头像
 0 条评论