java 泛型

泛型

  • 所有对象底层都是Object,不能对数据进行约束;
  • 向上向下转型,太过频繁,影响效率;

泛型是给编译器的,又称参数化类型;

  • 可以在类声明时通过一个标识表示类中某个【属性,方法返回值,参数】的类型;

  • 泛型是编译阶段确定,所以不能修饰静态成员;

  • 当在声明的时候,没有传入类型的时候,默认是Object类型

  • 给泛型的数据类型,必须是引用对象;

    List<Integer> arrayList = new ArrayList<Integer>();
    //简化形式
    List<Integer> arrayList = new ArrayList<>();
    //默认Object类型
    List arrayList = new ArrayList();
    

自定义泛型:

  • 普通成员可以使用泛型【属性,方法】;

  • 静态不能使用泛型,静态是和类相关,而泛型是和对象创建相关;

  • 使用泛型的数组不能初始化,

    • 比如进行new E[num],因为不确定E的类型,无法开辟空间;
  • 泛型的类型,是在创建对象的时候确定,

  • 在创建对象时,没有指定,默认为Object;

  • 泛型方法语句:

    修饰符 返回类型 方法名(参数列表){}

  • 泛型不具有继承型;

    List<Object> arrayList = new ArrayList<String>(); //语句错误;
    
  • 泛型的通配符:

    • <?>:取出是Object类型;

          public static void func(List<?> list) {
              for (Object obj : list){
                  System.out.println(obj.getClass());
              } 
          }
      
  • <? extends AA>: 支持AA类及其子类,规定了上限;

        public static void func(List<? extends AA> list) {
            for (AA obj : list){
                System.out.println(obj.getClass());
            } 
        }
    
  • <? super AA>:支持AA类及其父类,规定了下限;

        public static void func(List<? super AA> list) {
            for (Object obj : list){
                System.out.println(obj.getClass());
            } 
        }
    
posted @ 2025-02-19 18:30  烟雨断桥  阅读(14)  评论(0)    收藏  举报