泛型的好处

  1. a:将运行时期的ClassCastException,转移到了编译时期变成了编译失败。<br /> b:避免了类型强转的麻烦。

Java中的伪泛型:

泛型只在编译时存在**,**编译后就被擦除,在编译之前我们就可以限制集合的类型,起到作用。
例如:ArrayList al=new ArrayList<>();
编译后:ArrayList al=new ArrayList();

泛型类:

**Generic provides the template to generate multiple classes.**

  • 定义格式:修饰符 ``class ``类名``<类型参数``> {...}

    //此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
    public class Generic<T>{ 
      //key这个成员变量的类型为T,T的类型由外部指定  
      private T key;
    
      public Generic(T key) { //泛型构造方法形参key的类型也为T,T的类型由外部指定
          this.key = key;
      }
    
      public T getKey(){ //泛型方法getKey的返回值类型为T,T的类型由外部指定
          return key;
      }
    }
    
  • 使用格式:创建对象时,确定泛型的类型。

    • 泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
    • 传入的实参类型需与泛型的类型参数类型相同
      Generic<Integer> genericInteger = new Generic<Integer>(10); //此处的参数就必须是Integer类型
      
      定义的泛型类,就一定要传入泛型类型实参么?
      并不是这样,在使用泛型的时候如果传入泛型实参,则会根据传入的泛型实参做相应的限制,此时泛型才会起到本应起到的限制作用。如果不传入泛型类型实参的话,在泛型类中使用泛型的方法或成员变量定义的类型可以为任何的类型。