java学习笔记---第13章泛型程序设计
2009-06-09 20:28
597 查看
第13章 泛型程序设计
使用泛型机制编写的程序代码要比那些杂乱的使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性。
1.
为什么要使用泛型程序设计
l
泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。
出现编译错误比类在运行时出现的强制类型转换异常要好得多。类型参数的魅力在于,使得程序具有更好的可读性和安全性。
l
谁想成为泛型程序员
一个泛型程序员的任务就是预测出所有类的未来可能有的所有用途
通配符类型:通配符类型非常抽象,然而,他们能让库的构建者编写出尽可能灵活的方法
泛型程序设计划分为三个熟练级别:
基本级别是仅仅使用泛型类,典型的是ArrayList这类集合,不必考虑他们的工作方式和原因。
当把不同的类型类型混合在一起时,或是在与对类型参数一无所知的遗留的代码衔接的时候,可能会看到含糊不清的错误消息
那些原本涉及许多来自通用类型的强制类型转换的代码一定会因为使用类型参数而受益。
2.
简单的泛型类的定义
一个泛型类就是具有一个或多个类型变量的类
Public class Pair<T>{…}
Public class Pair<T,U>{…}
类定义中的类型变量指定方法的返回类型以及域和局部变量的类型。
类型变量使用大写形式,且比较短,这是很常见的。在Java库中,使用变量E表示集合的元素类型,K和V分别表示表的关键字与值的类型。T(需要时还可以使用字母U和S)表示“任意类型”。
用具体的类型替换变量就可以实例化泛型类型。
泛型类可以看作普通类的工厂
3.
泛型方法
Public static <T> T getMiddle(T[] a){…}
定义一个泛型方法可以在普通类中,也可以在泛型类中
当调用一个泛型方法时,在方法名前的尖括号中放入具体的类型。
4.
变量类型的限定
有时,类或方法需要对类型变量加以约束
让T所属的类有compareTo方法,解决这个问题的方法是将T限制为实现了Compareable接口(简单方法conpareTo的标准接口)的类。可以通过对类型变量T设置限定来做到这一点:
Public static <T extends Compareable>T min(T[] a)
此时泛型min方法只能被实现了Compareable接口的类的数组调用。
此处关键字都为extends
不能是implements。表示 T该是绑定类型的子类型。T和绑定类型可以是类,也可以是接口。选择关键字extends是因为它更接近子类的概念,并且Java的设计者也不打算在语言中添加一个新的关键字。
一个类型变量通配符可以有多个限定,限定类型用&隔开,这是因为都好用来分隔类型变量。
在Java继承中,可以根据需要拥有多个接口超类型,但界限中至多有一个类。如果用一个类作为界限,它必须是界限列表中的第一个
5.
6.
7.
8.
9.
使用泛型机制编写的程序代码要比那些杂乱的使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性。
1.
为什么要使用泛型程序设计
l
泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。
出现编译错误比类在运行时出现的强制类型转换异常要好得多。类型参数的魅力在于,使得程序具有更好的可读性和安全性。
l
谁想成为泛型程序员
一个泛型程序员的任务就是预测出所有类的未来可能有的所有用途
通配符类型:通配符类型非常抽象,然而,他们能让库的构建者编写出尽可能灵活的方法
泛型程序设计划分为三个熟练级别:
基本级别是仅仅使用泛型类,典型的是ArrayList这类集合,不必考虑他们的工作方式和原因。
当把不同的类型类型混合在一起时,或是在与对类型参数一无所知的遗留的代码衔接的时候,可能会看到含糊不清的错误消息
那些原本涉及许多来自通用类型的强制类型转换的代码一定会因为使用类型参数而受益。
2.
简单的泛型类的定义
一个泛型类就是具有一个或多个类型变量的类
Public class Pair<T>{…}
Public class Pair<T,U>{…}
类定义中的类型变量指定方法的返回类型以及域和局部变量的类型。
类型变量使用大写形式,且比较短,这是很常见的。在Java库中,使用变量E表示集合的元素类型,K和V分别表示表的关键字与值的类型。T(需要时还可以使用字母U和S)表示“任意类型”。
用具体的类型替换变量就可以实例化泛型类型。
泛型类可以看作普通类的工厂
3.
泛型方法
Public static <T> T getMiddle(T[] a){…}
定义一个泛型方法可以在普通类中,也可以在泛型类中
当调用一个泛型方法时,在方法名前的尖括号中放入具体的类型。
4.
变量类型的限定
有时,类或方法需要对类型变量加以约束
让T所属的类有compareTo方法,解决这个问题的方法是将T限制为实现了Compareable接口(简单方法conpareTo的标准接口)的类。可以通过对类型变量T设置限定来做到这一点:
Public static <T extends Compareable>T min(T[] a)
此时泛型min方法只能被实现了Compareable接口的类的数组调用。
此处关键字都为extends
不能是implements。表示 T该是绑定类型的子类型。T和绑定类型可以是类,也可以是接口。选择关键字extends是因为它更接近子类的概念,并且Java的设计者也不打算在语言中添加一个新的关键字。
一个类型变量通配符可以有多个限定,限定类型用&隔开,这是因为都好用来分隔类型变量。
在Java继承中,可以根据需要拥有多个接口超类型,但界限中至多有一个类。如果用一个类作为界限,它必须是界限列表中的第一个
5.
6.
7.
8.
9.
相关文章推荐
- Java学习笔记————泛型程序设计
- Java学习笔记【泛型程序设计】
- Bravo!Java学习笔记(2)---泛型程序设计
- [学习笔记] Java核心技术 卷一:基础知识 泛型程序设计(五)
- Java学习笔记之泛型(二):在方法上自定义泛型
- Java学习课堂笔记——面向对象程序设计的基本概念
- 黑马程序员--Java基础学习笔记【集合-List、泛型】
- Java学习笔记九(泛型)
- java高并发程序设计学习笔记五六JDK并发包
- Java基础学习笔记【08】泛型限定、泛型操作
- java核心技术学习笔记之一程序设计概述
- JAVA学习笔记35——泛型1:泛型的简介以及使用
- java学习笔记——泛型Generic
- java学习笔记(一)泛型
- Java 泛型学习笔记(二)
- Java学习笔记——泛型
- java学习笔记(一)--泛型与反射学习
- java 泛型 学习笔记
- Java学习笔记(十一)——泛型数据列表
- 【Java学习笔记】泛型