泛型不是数据类型,其实可以看作一个变量,用来接收数据类型;
其中,创建集合对象时候,右边执行构造方法时候泛型可以省略;
泛型的好处:
不使用泛型时候:
其中,声明定义集合对象名和创建集合对象时候没有使用泛型即没有 <>,
会报错:
使用泛型情况:
其中,创建集合对象的右边调用构造方法时候泛型要和左边引用集合类和对象名的泛型一致,可以省略;使用泛型避免了潜在的类型转换的错误;
定义含有泛型的类:
定义了泛型,属性和get/set方法也要是泛型,就是不知道数据类型,可以接收数据类型,可以看成是一个底层变量,E
当集合对象创建的时候,会确定泛型是什么数据类型,当参数传参到集合的构造方法赋值给E,可以是基本数据类型,也可以是对象类名;
其中,不写<>即为默认的Object对象类型,整数类型为Integer;
定义含有泛型的成员方法;
其中,泛型可以看作一个接收数据类型的变量,可以是E,M,S等变量名都可以;调用时候赋值;
调用这些含有泛型的方法:
其中,创建了这个类的对象,方法是泛型的,静态方法调用建议直接类名点方法调用,传参是什么数据类型则原来的泛型方法的泛型变量M,S就接收成为什么数据类型;
定义含有泛型的接口并使用:
实现类中指定接口的泛型:
其中,在实现implements接口的后面指定了接口的泛型<>之后,方法中就可以使用已经指定数据类型的泛型了;
第二种实现类跟着接口走,接口啥泛型实现类就是啥泛型:
其中,可以仿造着ArrayList实现类和List接口来写;
使用的时候:
其中,第一个实现类创建对象直接使用,因为在这个实现类对象中已经指定了泛型的数据类型;
第二个实现类是跟着接口走,泛型变量还没有赋值,入参是什么数据类型则是什么数据类型的泛型;