泛型在实际开发和面试中都非常重要,所以我们今天来谈谈这个话题

1,什么是泛型

泛型的本质是为了参数化类型,通过泛型指定的不同类型来控制形参具体限制的类型。

举个例子!

我们要定义一个只能存放整数的集合,怎么写?

List list = new ArrayList();

这样对吗?其实不行,这样我们可以往list添加任务数据类型

所以这个时候,解决办法就是采用泛型,可以这么来写

List<Integer> list = new ArrayList<>();

通过参数化类型,就可以限制list可以添加的类型

2,泛型的特点,只对编译期间有效,在运行期间无效(泛型的擦除)

我们来看看,以下这两个集合是同个类型吗?

List list1 = new ArrayList<>();

List list2 = new ArrayList<>();

很明显,在编译期间,两个集合都很好控制了添加的数据类型。

但是,在运行期间,这个类型会被擦除。我们来做个试验就得到这个结论

public static void main(String[] args) {

    Listlist1 = new ArrayList<>();

    List list2 = new ArrayList<>();

    System.out.println(list1.getClass() == list2.getClass());

}

可以试试结果,我打包票,出来的结果是true

3,注意点

泛型的参数类型只能是引用类型,不能是基本数据类型,比如int

4,泛型的使用

4.1 泛型类

public class GenericTest {

    public static void main(String[] args) {

        GenericClassg1 = new GenericClass<();

        g1.setKey(1);

        System.out.println(g1.getKey());

    }

}

class GenericClass{

    private T key;

    public void setKey(T key){

        this.key = key;

    }

    public T getKey(){

        return this.key;

    }

}

4.2 泛型接口

interface GenericInterface{

    public T getNext();

}