介于我在写业务代码的时候时,想用泛型来实现代码复用,但是由于接口较多,抽象程度较复杂,导致没有理清楚泛型的关系,因此重新学习理解Java泛型。

image-20200602002631822

1 作用对象

1.1 泛型类

当泛型作用在类上,即一个类是一个泛型类的时候。泛型是类的参数。

例如:

我们创建一个有Id标志的数据类。无论类中的泛型参数T是什么类型的,这个类都有一个id。

public class IdData<T> {
    String id;
    T data;
}

当我们作为这个泛型类的客户时,我们要用泛型类。使用泛型类的时候,我们需要指定类的泛型参数,从而让这个泛型类因为泛型参数的不同而变成不同的类(虽然在运行时泛型参数被擦除了)。即一个泛型类,在被使用的时候,可以因为泛型参数的不同,而变的不同,如:

IdData<String> stringIdData = new IdData<>();
IdData<Integer> integerIdData = new IdData<>();
IdData<Thread> threadIdData = new IdData<>();

设计泛型类的目的一般是:

  1. 这个类中的某个属性具有可变性,因此这个类在运行时具有通用性。
  2. 这个类是一个容器类,通过泛型可以让这个容器类容纳不同类型的对象。
  3. 设计泛型类,是因为类在实例化时,会因为泛型参数的不同,而表现不同,如果类的实例化的地方总是只有一种泛型参数,则这个类不需要设计成泛型类。

1.2 泛型方法

在泛型方法中,泛型通常作用于方法的:

  1. 参数
  2. 返回值

2 边界

3 泛型通配符?

普通类是对一组对象的抽象。

泛型类是对一组具有共性(例如两个类除了一两个属性不同外,其余代码都相同,那么这一两个属性应做成泛型)的普通类的抽象。

泛型通配符类是对泛型类的抽象。

4 使用泛型的目的