泛型(持续更新中......)

一、泛型类和泛型接口

1.如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型。
2.要求:如果大家定义了类带了泛型的,建议在实例化时要指明类的泛型。
3.由于子类在继承带泛型的父类时,如果父类指明了泛型类型。则实例化子类对象时,不再需要指明泛型。子类不是泛型类。

public class SubOrder extends Order {
}

4.由于子类在继承带泛型的父类时,如果父类不指明泛型类型。是泛型类(例:ArrayList)

public class SubOrder1 extends Order {
}

1.泛型类可以有多个参数,此时应将多个参数一起放在尖括号内。比如:
2.泛型类的构造器如下:public GenericClass() {},错误的是public GenericClass() {}
3.实例化后,操作原来泛型位置的结构必须与指定的泛型类型一致。
4.泛型不同的引用不能相互复制。
5.泛型如果不指定,将被擦除,泛型对应类型均按照Object处理,但不等价与Object。经验:泛型要使用一路都用。要不用,一路都不要用。
6.如果泛型结构是一个接口或抽象类,则不可以创建泛型类的对象。
7.jdk1.7,泛型的简化操作:ArrayList flist = new ArrayList<>();
8.泛型的指定中不能使用基本数据类型,可以使用包装类替换。
9.在类/接口上声明的泛型,在本类或本接口中即代表某种类型,可以作为非静态属性的类型,非静态方法的参数类型,非静态防范的返回值类型,但在静态方法中不能使用类得泛型。
10.异常类不能是类的泛型
11.不能使用new E[]。但是可以: E[] elements = (E[])new Object[capacity]; 参考:ArrayList源码中声明:Object[] elementData,而非泛型参数类型数组。
12.父类有泛型,子类可以选择保留泛型也可以选择指定泛型类型:

子类不能保留父类的泛型:按需实现
   没有类型  擦除
子类保留父类的泛型:泛型子类
  全部保留
  部分保留
1.png

结论:子类必须是“富二代”,子类除了指定或保留父类的泛型,还可以增加自己的泛型。

二、泛型方法

泛型方法:在方法中出现了泛型的结构,泛型参数与类得泛型参数没有任何关系。
泛型方法可以声明为静态的,原因:泛型参数是在调用方法的时候确定的,并不是实例化类时确定的。

//泛型参数
public  List copyFromArrayToList(E[] arr) {
}
三、泛型在继承方面的体现

泛型在继承方面的体现
虽然类A是类B的父类,但是G和 G二者不具备子父类关系,二者是并列关系。
补充:类A是类B的父类,A是B的父类

//如下代码:这种写法时错误的,此时list1(List )和list2(List )的类型不具又子父类关系。虽然Object是String的父类。
List list1 = null;
List list2 = null;
list1 = list2

 
 

证明反证法: list1=list2;假设list1=list2,list1.add(123);导致非String的数据混入。出错

四、通配符的使用

类A是类B的父类,但是G和 G二者没有关系,G是G和 G的父类
对于List就不能向其内部添加数据了,除了添加null之外。

List list1 = null;
List list2 = null;
List
list1 = list2
 
 
1609216469(1).png

1609216767(1).png

你可能感兴趣的:(泛型(持续更新中......))