泛型在实际开发和面试中都非常重要,所以我们今天来谈谈这个话题
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();
}