javaSE复习之——泛型

泛型的概述

可以把泛型理解成“参数化类型”,他可以在类、接口和方法中使用,分别被称为泛型类、泛型接口、泛型方法

泛型类的使用

1
Collection<泛型> =  new Collection<>();
  • 定义方法的作用

    指定自己需要使用的数据类型。

泛型接口的定义:

1
interface Inter<E> {}

泛型类的定义与接口的实现

1
2
class press<E> implements Inter<String> { }
//在这个类中用E代替传入的数据类型即可
  • 定义类的作用:

    在创建这个类的引用或者对象时,可以自己指定数据类型。ArrayList这个类就是这样定义的。

泛型类中方法使用定义好的泛型

1
public E aa() {}

ps:在创建这个泛型类的时候就把这个E给赋值了,赋的值时自己定义的数据类型,可以在方法中直接使用E,当然这个E可以定义成其他的符号。

泛型方法的定义

1
public<T> aaa() {}

作用:

让类中的某个方法有自己的泛型。

  • 注意事项:

    1、在定义了泛型的类中最好不要定义某个方法特有的泛型
    2、静态方法因为在类的加载就加载了,所以不能使用类的泛型,只能声明自己的泛型

ps:可以把泛型看作一个变量来理解。

泛型定义示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main (String ages[]) {
person<String> p =new person<String>();
//创建完之后,E就等于String了

p.b(true);
//调用后b这个方法中T的类型就等于Boolean了

}
class person<E> {
private E a;

public<T> void b(T tt) {
E s;
System.out.println(tt);
}
}

泛型作用

限制某个集合只能存什么类型的数据,防止出现数据的安全隐患

泛型的好处:

1、提高了安全性(因为能限制只能存什么数据,所以把运行期的错误转移到了编译期

2、省去了数据需要从Object强转的麻烦

泛型的注意事项

1、泛型的数据类型一定要时引用数据类型

2、不要把泛型数据类型定义成Object,因为没有任何意义。

jdk1.7版本新特性:菱形泛型

解析:创建对象时,等号前面<>里写了泛型,那么后面<>里可以不写数据类型,因为两个尖括号放一起很想菱形,所以叫做菱形泛型

泛型高级之——通配符?

  • ``` ArrayList

    a = new ArrayList<>();```

    当我们遇到右边返回对象时,这时我们不知道返回对象的泛型(类型)是什么,那么我们左边就可以用通配符”?”来替代。

  • <? extends E>

    向下限定,表示只能传入E或者它的子类

泛型的边界定义

  • <? extends E>:

    泛型固定上边界,向下限定,表示只能传入E或者它的子类。

  • : >泛型固定下边界,向上限定,表示只能传入E或者它的父类