javaSE复习之——泛型
泛型的概述
可以把泛型理解成
“参数化类型”
,他可以在类、接口和方法中使用,分别被称为泛型类、泛型接口、泛型方法
。
泛型类的使用
1 | Collection<泛型> = new Collection<>(); |
- 定义方法的作用
指定自己需要使用的数据类型。
泛型接口的定义:
1 | interface Inter<E> {} |
泛型类的定义与接口的实现
1 | class press<E> implements Inter<String> { } |
- 定义类的作用:
在创建这个类的引用或者对象时,可以自己指定数据类型。ArrayList这个类就是这样定义的。
泛型类中方法使用定义好
的泛型
1 | public E aa() {} |
ps:在创建这个泛型类的时候就把这个E给赋值了,赋的值时自己定义的数据类型,可以在方法中直接使用E,当然这个E可以定义成其他的符号。
泛型方法的定义
1 | public<T> aaa() {} |
作用:
让类中的某个方法有自己的泛型。
- 注意事项:
1、在定义了泛型的类中最好不要定义某个
方法特有的泛型
2、静态方法
因为在类的加载就加载了,所以不能使用类的泛型,只能声明自己的泛型
。
ps:可以把泛型看作一个变量来理解。
泛型定义示例
1 | public static void main (String ages[]) { |
泛型作用
限制某个集合只能存什么类型的数据,
防止出现数据的安全隐患
。
泛型的好处:
1、提高了
安全性
(因为能限制只能存什么数据,所以把运行期
的错误转移到了编译期
)2、省去了数据需要从Object强转的麻烦
泛型的注意事项
1、泛型的数据类型一定要时
引用数据类型
。2、不要把泛型数据类型定义成
Object
,因为没有任何意义。
jdk1.7版本新特性:菱形泛型
解析:创建对象时,
等号前面
<>里写了泛型,那么后面<>里可以不写数据类型,因为两个尖括号放一起很想菱形,所以叫做菱形泛型
。
泛型高级之——通配符?
- >
```
ArrayList>
a = new ArrayList<>();```
当我们遇到
右边
返回对象时,这时我们不知道返回对象的泛型(类型)是什么,那么我们左边就可以用通配符”?”来替代。 <? extends E>
向下限定,表示只能传入E
或者它的子类
。
泛型的边界定义
<? extends E>:
泛型固定上边界,向下限定,表示只能传入E或者它的子类。
- super E>: >泛型固定下边界,向上限定,表示只能传入E或者它的父类