1、Object类
在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本身就是一个安全隐患。
2、泛型
也是实现参数类型的任意化,但是在编译的时候能够检查类型安全,并且所有的强制转换都是自动和隐式的。
一、通配符和类型限定
通配符【?】
-
表示不确定的 java 类型;一般是用作<? extends 具体类型>或者<? super 具体类型>
-
通配符只允许出现在引用中(普通变量引用、形参),不允许出现在泛型定义中(泛型类、泛型接口、泛型方法的< >里)
类型限定【T、K、V、E】
-
约定俗称的东西,并不是java中规定的,可以换成任意一个字母,但是可读性会变差;用来表示泛型
-
T (type) 表示具体的一个java类型
-
K、V (key value) 分别代表java键值中的Key Value
-
E (element) 代表Element
区别:
1、“T”和“?”运用的地方不同:“?”是定义在引用变量上,“T”是类上或方法上。
2、类型限定只有<T extends 数据类型> ,只能设定上边界,而通配符既可以设定上边界<? extends 数据类型>也可以设定下边界<? super 数据类型>
https://blog.csdn.net/a18615971648/article/details/115799984
二、泛型接口
Java接口使用泛型,有两种方式!
-
第一种在实现接口的子类依旧使用泛型,在实例化的时候在动态添加type
-
第二种形式,子类实现接口的时候具体化type,在实例化的时候不用再动态添加type