泛型
概念:
是一种未知的数据类型,相当于是一个标签,以便以后方便使用。
注意:泛型必须是引用数据类型
优点:
1.避免了类型转换的麻烦,存储的是什么数据类型取出的就是什么数据类型
2.把运行期异常(代码运行之后会抛出异常),提前到了编译期(代码编译时候抛 出的异常)
3.提高了代码的复用性
方法的定义:
格式:
修饰符 返回值类型 方法名称(参数列表){//在参数列表中是可以直接使用泛型
}
注意:泛型方法,必须要先定义泛型,才能够使用
接口的定义:
格式:interface 接口名称{}
注意:实现类在实现该接口的时候,泛型如何处理:
1.在实现接口的时候,接口直接给定具体的数据类型. 实现类中可以不再定义泛型了
2.如果接口中的泛型不给定具体数据类型,那么实现类中必须也要有泛型,该泛型必须要和接口的泛型一致
通配符:
格式:?
含义:代表任意的数据类型,但是?不知道具体是什么类型
泛型的限定:
上限限定:
格式:? extends E
含义:代表使用的泛型只能是E类型的子类/本身。固定上边界。?代表的是E或者E的子类。(可以理解为<=Max)
下限限定:
格式:? super E
含义:代表使用的泛型只能是E类型的父类/本身。固定下边界。?代表的是E或者E的父类/父接口。(可以理解为>=Min)