JDK5引入的新特性,所操作的数据类型变成了一个参数。将原来的具体类型参数化,然后在调用时再传入具体的类型,这种参数类型用在类,方法和接口中,就成了泛型类,泛型方法,泛型接口。
1.2 泛型定义格式<>
问题:一个Collection类对象,里面可以储存任意类型元素,在其中放入String类型元素,输出时类型强转为String,正常输出。但是当里面加入了整数型元素,再强转输出就会出现类型转换异常ClassCastException
解决方法:使用泛型,1. 将运行时异常提前到了编译,2. 避免了类型转换
爷就是想用一个方法接收不同类型,不想搞两个类,那么我们就可以用一个泛型类
格式:public class Generic
其中T可以被写为任意标记,常用的有T、E、K、V
泛型类Demo:
//泛型类 public class Generic3.泛型方法{ private T t; public T getT(){ return t; } public T setT(){ this.t=t; } } Generic g1 = new Generic (); g1.set("名字"); System.out.println(g1.getT()); Generic g2 = new Generic (); g2.setT(12); System.out.println(g2.getT()); //都可以正常输出
场景 一个类里面重写了一堆方法,参数不同。但是好麻烦
泛型类每次都要创建对象还要声明类型
定义格式:public void showT(T t){};
泛型方法Demo:
但是为什么有了这个还需要方法重载?
4.泛型接口格式:public interface Generic{}
泛型接口Demo:
//接口 public interface Generic5.类型通配符 >用来表示各种泛型List的父类,List>元素可以匹配任何的类型,并不能把元素添加在其中{ void show(T t); } //泛型接口的实现类 public class GenericImpl implements Generic { @Override public void show(T t) { System.out.println(t); } } //测试demo public class GenericInterfaceDemo { public static void main(String[] args) { Generic g1 = new GenericImpl<>(); g1.show("wyd小朋友"); Generic g2 =new GenericImpl<>(); g2.show(24); } }
类型通配符上限: extends 类型> 限制了最高的类型,可表示当前类型与其子类型
类型通配符下限: super 类型>限制了最低的类型,不能比当前类型更小
场景:有一堆相加求和的函数,但是参与运算的个数不同,又搞出了一堆重写,这样不好
实际上可变参数内部a是个数组,把所有的参数都封装进了数组a,所以对数组各元素求和就能求和
注意:1.一个方法中只能有一个可变参数。2.一个方法中含有多个参数,可变参数必须放在最后
增删都不行,可以改
List.of(E…elements)返回包含任意元素数量的不可变列表增删改都不行
Set.of(E…elements)返回包含任意元素数量的不可变集合集合不能有重复元素
不能做增删操作



