泛型:泛型是JDK1.5出现的新特性。
泛型的好处:
1:将运行时出现的问题提前至了编译时
2:避免了无谓强制类型转换
泛型是JDK1.5使用的新特性。
泛型在集合中的常见应用:
ArrayList<String> list = new ArrayList<String>(); true 推荐使用 ArrayList<Object> list = new ArrayList<String>(); false ArrayList<String> list = new ArrayList<Object>(); false
以下两种写法注主要是为了兼顾新老系统的兼容性问题。
ArrayList list = new ArrayList(); true
ArrayList list = new ArrayList(); true
注意:泛型没有多态的概念,左右两边的数据类型必须要一致,或者只写一边的泛型类型。
推介使用:两边都写泛型
自定义泛型:
自定义泛型就是一个数据类型的站位符或者理解为一个数据类型的变量
泛型方法:
修饰符<声明自定义的泛型>返回值类型 函数名(自定义的泛型 变量名)
泛型方法要注意的事项:
1:泛型方法中的自定义泛型的具体数据类型是在调用该函数的时候传入实参时确定的
2:自定义泛型所用的标识符只要符合标识符的命名规则即可,但是我们一般都习惯使用一个大写字母表示
泛型类:
泛型类的定义格式:
class类名<声明自定义的泛型>{}
泛型类要注意的事项:
1:泛型类上的自定义泛型是在使用该类创建对象的时候指定具体的数据类型的
2:如果一个类已经自定义了泛型,使用该类创建对象的时候如果没有指定泛型的具体数据类型,那么默认为Object类型
3:静态的函数不能使用类上自定义的泛型,如果静态函数需要使用,必须要在函数上自定义泛型
泛型接口:
泛型接口的定义格式:
interface 接口名<声明自定义的泛型>{}
泛型接口要注意事项:
1:泛型接口上的自定义泛型是在实现该接口的时候指定具体数据类型的
2:如果实现接口的时候没有指定接口上的自定义泛型的具体数据类型,那么默认为Object数据类型
3:如果需要在创建接口实现类对象的时候才指定接口上自定义泛型,那么需要以下格式:
格式:
class 类名 implements 接口
泛型中的通配符:?
泛型上下限:
? super Integer 允许是Integer数据类型或者是Integer父类类型————泛型的下限
Integer–>Number–>int
? extends Number 允许是Number数据类型或者是Number子类的数据类型——-泛型的上限 Number<——Integer