泛型的核心概念就是参数化类型(parameterized type),参数化类型很重要,因为他使程序员能创建将要操作的数据类型作为形参的类,接口和方法.操作类型形参的类,接口和方法就称为是泛型的,如泛型类,泛型方法等.
泛型代码的主要优点是他们可以自动的处理传递给其类型形参的数据类型.许多算法不管应用于什么数据类型,在逻辑上都是相同的.例如,快速排序算法不管其排序项是Integer,string,Object还是Thread,算法逻辑都是相同的.使用泛型,就可以独立于特定数据类型来一次性定义算法,然后把该算法应用于各种数据类型,而不需要做额外的工作.
在引入泛型之前,Java实际上也允许程序员通过操作对Object的引用创建通用的类,接口和方法.因为Object是所有其他类的超类,所以Object引用可以引用任何对象类型.因此,在泛型代码出现之前,通用类,接口和方法通过使用Object引用来操作各种数据类型.问题是这种做法无法提供类型安全性,因为强制类型转换要求显式的把Object转换为所要操作的实际数据类型.因此,可能偶尔出现类型不匹配的错误,泛型提高了类型安全性,因为他让这些强制类型转换自动的,隐式的进行.总之,泛型扩展了重用代码的能力,并且可以更加安全,可靠的进行.
问:听说Java的泛型类似于C++的模版,事实是否如此?
答:Java的泛型的确类似于C++的模版,Java称为参数化类型的东西,C++称为模版.但是,Java的泛型和C++模版并不等同,而且二者在泛型类型方面有一些本质上的区别.大多数时候,Java的方法比较简单易用.
一句忠告:如果有C++背景知识,不要比照C++急于得出Java中的泛型如何工作的结论.两种方法在处理泛型代码时存在细微但根本的区别.