咱们的集合能够存储多种数据类型的元素,那么在存储的时候没有任何问题,可是在获取元素,并向下转型的时候,可能会存在一个错误,而这个错误就是ClassCastException . 很显然,集合的这种能够存储多种数据类型的元素的这个特色,不怎么友好 , 程序存在一些安全隐患,那么为了出来这种安全隐患,咱们应该限定一个集合存储元素的数据类型,咱们只让他存储统一中数据类型的元素,那么在作向下转型的是就不会存在这种安全隐患了. 怎么限定集合只能给我存储同一种数据类型的元素呢? 须要使用泛型。java
了解引入泛型的动机,就先从语法糖开始了解。程序员
语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家Peter.J.Landin发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并无影响,可是更方便程序员使用。Java中最经常使用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。虚拟机并不支持这些语法,它们在编译阶段就被还原回了简单的基础语法结构,这个过程成为解语法糖。安全
Java 泛型就是把一种语法糖,经过泛型使得在编译阶段完成一些类型转换的工做,避免在运行时强制类型转换而出现ClassCastException,即类型转换异常。ide
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类型的,天然任何对象类型均可以放入、均可以取出,可是这么写会有两个问题:code
public static void main(String[] args){ List<String> list = new ArrayList<String>(); list.add("123"); list.add("456"); System.out.println(list.get(0)); }
这就是泛型。对象