我们的集合可以存储多种数据类型的元素,那么在存储的时候没有任何问题,但是在获取元素,并向下转型的时候,可能会存在一个错误,而这个错误就是ClassCastException . 很显然,集合的这种可以存储多种数据类型的元素的这个特点,不怎么友好 , 程序存在一些安全隐患,那么为了出来这种安全隐患,我们应该限定一个集合存储元素的数据类型,我们只让他存储统一中数据类型的元素,那么在做向下转型的是就不会存在这种安全隐患了. 怎么限定集合只能给我存储同一种数据类型的元素呢? 需要使用泛型。
了解引入泛型的动机,就先从语法糖开始了解。
语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家Peter.J.Landin发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。Java中最常用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。虚拟机并不支持这些语法,它们在编译阶段就被还原回了简单的基础语法结构,这个过程成为解语法糖。
Java 泛型就是把一种语法糖,通过泛型使得在编译阶段完成一些类型转换的工作,避免在运行时强制类型转换而出现ClassCastException,即类型转换异常。
JDK 1.5 时才增加了泛型,并在很大程度上都是方便集合的使用,使其能够记住其元素的数据类型。
在泛型(Generic type或Generics)出现之前,是这么写代码的:博客
public static void main(String[] args){
List list = new ArrayList();
list.add("123");
list.add("456");
System.out.println((String)list.get(0));
}
当然这是完全允许的,因为List里面的内容是Object类型的,自然任何对象类型都可以放入、都可以取出,但是这么写会有两个问题:
public static void main(String[] args){
List<String>
list = new ArrayList<String>();
list.add("123");
list.add("456");
System.out.println(list.get(0));
}
这就是泛型。
原文:https://blog.51cto.com/14637764/2459813