
泛型第8章Java基础入门(第3版)
第8章 泛型 Java基础入门(第3版)

学习目标/Target?山了解泛型,能够说出泛型的作用和优点掌握泛型类,能够独立定义和使用泛型类掌握泛型接口,能够独立定义和使用泛型接口掌握泛型方法,能够独立定义并使用泛型方法掌握类型通配符,能够正确定义类型通配符的上限和下限
学习目标/Target 掌握泛型类,能够独立定义和使用泛型类 掌握泛型接口,能够独立定义和使用泛型接口 了解泛型,能够说出泛型的作用和优点 掌握泛型方法,能够独立定义并使用泛型方法 掌握类型通配符,能够正确定义类型通配符的上限和下限

章节概述/Summary?通过之前的学习,读者可以了解到,把一个对象存入集合后,再次取出该对象时,该对象的编译类型就变成了Object类型(尽管其在运行时类型没有改变)。集合设计成这样,提高了它的通用性,但是也带来了一些类型不安全和繁琐的问题,例如,集合可以同时存储任何类型的对象,通常对取出之后的对象都需要强制类型转换,而且如果不知道实际参数类型的情况,也无法进行强制类型转换。为了解决这些问题,从JDK5版本开始引入了泛型,本章将围绕泛型的相关内容进行讲解
章节概述/ Summary 通过之前的学习,读者可以了解到,把一个对象存入集合后,再次取出该对象时,该 对象的编译类型就变成了Object类型(尽管其在运行时类型没有改变)。集合设计成这 样,提高了它的通用性,但是也带来了一些类型不安全和繁琐的问题,例如,集合可 以同时存储任何类型的对象,通常对取出之后的对象都需要强制类型转换,而且如果 不知道实际参数类型的情况,也无法进行强制类型转换。为了解决这些问题,从JDK 5版本开始引入了泛型,本章将围绕泛型的相关内容进行讲解

会目录/Contents?01泛型基础02泛型类03泛型接口泛型方法0405类型通配符
目录/Contents 01 02 03 泛型基础 泛型类 泛型接口 04 泛型方法 05 类型通配符

管?8.1泛型基础
8.1 泛型基础

8.1.1泛型概述先定一个小目标!了解泛型概述,能够说出什么是泛型yx.ityxb.com
yx.ityxb.com 8.1.1 泛型概述 先定一个小 目标! 了解泛型概述,能够说出什么是泛型

8.1.1泛型概述泛型的概念泛型是在JDK5中引入的一个新特性,其本质是参数化类型,也就是将具体的类型形参化,参数化的类型(可以称之为类型形参)在使用或者调用时传入具体的类型(类型实参),类似于调用方法时传入实参才确定方法形参的具体值。泛型的声明由一对尖括号和类型形参组成,类型形参定义在尖括号中间,定义类、接口和方法时使用泛型声明,定义出的类、接口和方法分别称为泛型类、泛型接口和泛型方法。yx.ityxb.com
yx.ityxb.com 8.1.1 泛型概述 泛型是在JDK 5中引入的一个新特性,其本质是参数化类型,也就是将具体的类 型形参化,参数化的类型(可以称之为类型形参)在使用或者调用时传入具体的 类型(类型实参),类似于调用方法时传入实参才确定方法形参的具体值。泛型 的声明由一对尖括号和类型形参组成,类型形参定义在尖括号中间,定义类、接 口和方法时使用泛型声明,定义出的类、接口和方法分别称为泛型类、泛型接口 和泛型方法。 泛型的概念

8.1.1泛型概述》泛型的定义使用泛型编程,会在使用或者调用时传入具体的类型时才确定最终的数据类型,所以集合需要存储什么类型的数据,在创建集合时传入对应的类型即可。定义泛型时类型形参由一对尖括号(<>)包含在中间,使用或者调用泛型时,需要将类型实参写在尖括号(<>)之间JDK5之后的类库中很多重要的类和接口都引入了泛型,例如集合体系中的类和接口。下面分别演示未引入泛型和使用泛型编程的区别,体验泛型具体有什么好处yx.ityxb.com
yx.ityxb.com 8.1.1 泛型概述 泛型的定义 使用泛型编程,会在使用或者调用时传入具体的类型时才确定最终的数据类型,所以集 合需要存储什么类型的数据,在创建集合时传入对应的类型即可。 定义泛型时类型形参由一对尖括号(<>)包含在中间,使用或者调用泛型时,需要将 类型实参写在尖括号(<>)之间。 JDK 5之后的类库中很多重要的类和接口都引入了泛型,例如集合体系中的类和接口。 下面分别演示未引入泛型和使用泛型编程的区别,体验泛型具体有什么好处

8.1.1泛型概述未引入泛型之前,如果想要创建一个只保存Integer类型的List集合。案例一演示具体代码如下所示。publicclassExample01publicstaticvoidmain(Stringlargs)Il创建一个只保存lnteqer类型的List集合List intList=newArrayListOintList.add(1);intList.add(2);//因为失误存放了Integer类型之外的字符串数据intList.add(3");for(inti=O,i<intList.size;i++)/*因为List里面默认取出的全部Object对象,所以使用之前需要进行强*制类型转换。集合内最后一个元素进行转换时候将出现类型转换异常**Integernum=(Integer)intList.get(0))yx.ityxb.com
yx.ityxb.com 8.1.1 泛型概述 案例一演示 未引入泛型之前,如果想要创建一个只保存Integer类型的List集合。 具体代码如下所示。 public class Example01{ public static void main(String[] args) { // 创建一个只保存Integer类型的List集合 List intList = new ArrayList(); intList.add(1); intList.add(2); //因为失误存放了Integer类型之外的字符串数据 intList.add("3"); for (int i = 0; i < intList.size(); i++) { /*因为List里面默认取出的全部Object对象,所以使用之前需要进行强 * 制类型转换。集合内最后一个元素进行转换时候将出现类型转换异常 * */ Integer num=(Integer)intList.get(i); } } }

8.1.1泛型概述案例一代码分析在案例一的代码中,第4行代码想创建一个只保存Integer类型的List集合,第5~8行代码往集合中存放数据,由于存放数据时并没有出现编译异常,操作者认为存入的数据类型都符合要求,但是在执行第13行代码时却会出现异常。因为在第8行代码中存放了Integer类型之外的字符串数据。接下来使用泛型优化案例一代码。yx.ityxb.com
yx.ityxb.com 8.1.1 泛型概述 案例一代码分析 在案例一的代码中,第4行代码想创建一个只保存Integer类型的List集合,第5~8 行代码往集合中存放数据,由于存放数据时并没有出现编译异常,操作者认为存 入的数据类型都符合要求,但是在执行第13行代码时却会出现异常。因为在第8 行代码中存放了Integer类型之外的字符串数据。接下来使用泛型优化案例一代码