Java 泛型简明教程
泛型是 Java SE 5.0 中引入的一项特征,自从这项语言特征出现多年来,我相信,几乎所有的 Java 程
序员不仅听说过,而且使用过它。关于 Java 泛型的教程,免费的,不免费的,有很多。我遇到的最好的
教材有:
• The Java Tutorial
• Java Generics and Collections, by Maurice Naftalin and Philip Wadler
• Effective Java 中文版(第 2 版), by Joshua Bloch.
尽管有这么多丰富的资料,有时我感觉,有很多的程序员仍然不太明白 Java 泛型的功用和意义。这就是
为什么我想使用一种最简单的形式来总结一下程序员需要知道的关于 Java 泛型的最基本的知识。
Java 泛型由来的动机
理解 Java 泛型最简单的方法是把它看成一种便捷语法,能节省你某些 Java 类型转换(casting)上的操
作:
1 List<Apple> box = ...;
2 Apple apple = box.get(0);
上面的代码自身已表达的很清楚:box 是一个装有 Apple 对象的 List。get 方法返回一个 Apple 对象实
例,这个过程不需要进行类型转换。没有泛型,上面的代码需要写成这样:
1 List box = ...;
2 Apple apple = (Apple) box.get(0);
很明显,泛型的主要好处就是让编译器保留参数的类型信息,执行类型检查,执行类型转换操作:编译
器保证了这些类型转换的绝对无误。
——相对于依赖程序员来记住对象类型、执行类型转换 这会导致程序运行时的失败,很难调试和解决,而
编译器能够帮助程序员在编译时强制进行大量的类型检查,发现其中的错误。
泛型的构成
由泛型的构成引出了一个类型变量的概念。根据 Java 语言规范,类型变量是一种没有限制的标志符,产
生于以下几种情况:
• 泛型类声明
• 泛型接口声明
• 泛型方法声明
• 泛型构造器(constructor)声明