Java中的泛型

时间:2022-07-18 07:34:15

1:泛型(掌握)
  (1)泛型概述
    是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。
  (2)格式:
    <数据类型>
    注意:该数据类型只能是引用类型。
  (3)好处:
    A:把运行时期的问题提前到了编译期间
    B:避免了强制类型转换
    C:优化了程序设计,解决了黄色警告线问题,让程序更安全
  (4)泛型的前世今生
    A:泛型的由来
      Object类型作为任意类型的时候,在向下转型的时候,会隐含一个转型问题
    B:泛型类 :public class 类名<泛型类型1,泛型类型2、、、> 如:public class studet<T>{ //里面T表示的是一个类型名。 }
    C:泛型方法:(它会进行类型推断)
      类型1:类上有泛型类型。
       public class stduet<T> {
        public void method(T t){ }
       }
      类型2:类上没有泛型类型
        public class students{
          public <T> void show(T t){ }
        }
    D:泛型接口:public interface 接口名 <泛型类型1,泛型类型2、、、>{ }
        public interface ter<T t>{
            public void add(T t){ }
        }

    E:泛型高级通配符:
      由于泛型在明确的指定类型后,前后的类型必须是一样的,否则报错。而有时候,我们往往不知道是该类还是该类的子类,因此,刚开始无法确定类型,因此需要通配符。
        ? 表示的是任意类型,如果没有明确,那么就是Object以及任意的java类
          如: Collection<?> c =new ArrayList<Object>();
        ? extends E 表示的是向下限定,E及其子类 ,这里是表示只能统配该类和该类的子类可以。
          如: Collection<? extends animal> c =new ArrayList<Dog>();可以
          Collection<? extends animal> c =new ArrayList<Object>(); 不可以
        ? super E 表示的是向上限定,E及其父类 ,这里是表示只能统配该类和该类的父类。
          如:Collection<? extends animal> c =new ArrayList<Dog>(); 不可以
          Collection<? extends animal> c =new ArrayList<Object>(); 可以
    (5)JDK5的新特性:自动拆装箱,泛型,增强for,静态导入,可变参数,枚举。

  2:增强for循环
    (1)是for循环的一种
    (2)格式:
      for(元素的数据类型 变量名 : 数组或者Collection集合的对象) {
          使用该变量即可,该变量其实就是数组或者集合中的元素。
        }
    (3)好处:
      简化了数组和集合的遍历
    (4)弊端
      增强for循环的目标不能为null。建议在使用前,先判断是否为null。

3:静态导入
    (1)可以导入到方法级别的导入,可以直接调用方法名即可。
    (2)格式:
      import static 包名....类名.方法名;
    (3)注意事项:
      A:方法必须是静态的
      B:如果多个类下有同名的方法,就不好区分了,还得加上前缀。
      所以一般我们并不使用静态导入,但是一定要能够看懂。

4:可变参数(掌握)
    (1)如果我们在写方法的时候,参数个数不明确,就应该定义可变参数。
    (2)格式:
      修饰符 返回值类型 方法名(数据类型... 变量) {}
      public static int sum(int... a){ } //在调用该方法的时候会有具体的参数的个数。
    注意:
      A:该变量a其实是一个数组名
      B:如果一个方法有多个参数,并且有可变参数,可变参数必须在最后
    (3)Arrays工具类的一个方法
      asList()把数组转成集合。
      注意:虽然可以把数组转换成集合,但是这个集合的长度不能改变,原因是这个集合本质上还是数组,数组的长度是不变的。