Java17 泛型
JDK5中支持. 泛型只支持引用数据类型.为什么?请看下面:
所有的数据被存的时候都是以Object存储.

Java的泛型是伪泛型.它只是帮助编译器做类型检查.
刚才如果我们用ArrayList<String> list = new ArrayList<>();,然后往其中add 字符串,但实际上存储的仍然是Object.只是我们取出当中的元素的时候,会自动帮我们强转成String.(可见后面是怎么"自动"的)
如果我们查看class文件,会发现全部都是ArrayList list = new ArrayList(); 也就是说,底层不是真正的泛型,只是泛型帮助编译器做检查而已. 泛型会在编译过后,在class文件当中消失.这叫做"泛型擦除"
为什么?因为JDK5以前是没有泛型的.如果不采用泛型擦除,那么JDK5以前的老代码就不能和之后的代码兼容了.
按照上面的逻辑,我们ArrayList
泛型类
E:element T:type

使用:

泛型方法

可变参数:底层就是一个普通数组.写法就是三个点

泛型接口:
1.实现类自己给出类型:(注:List<T>是个泛型接口)
之后,使用MyArrayList2就像使用普通类一样,不需要再指定泛型什么的了.
2.类泛型延续

泛型不具备继承性.也就是说,下面这样写会报错:
注意,这和ArrayList可以存子类是不一样的.这是因为"数据具备继承性"
那我上面的需要怎么办?写成public static<E> void method(ArrayList<E> list)即可.
泛型通配符:如果不确定类型,但是知道是在某个继承体系中的,则可以使用
注意,这里不需要像泛型函数一样在static后写<E>