泛型技术,用途之一就是建立资料群集(collections),允许使用者将某些特定类型的资料(物件)置入其中,并于取出时明确知道元素的类型,无需做(向下)转型动作。
论文软件组件,又称为软件积木或软件IC)的远景。过去数十年来,泛型技术比较属于研究单位中的骄客,实现出来且被广泛运用的产品极少。虽然Ada, ALGOL68, Eiffel, C++等语言都支援泛型相关语法,但是直到C++ STL的出现,泛型技术在
软体发展圈内才开始有了大量反响。
泛型(generics, genericity)又称为「参数化类型(parameterized types)」或模板(templates),或所谓「参数式的多型(parametric polymorphism)」。主要是一种类型代换(type substitution)概念,是和继承(inheritance)不同而互补的一种组件复用机制。假设某个泛型
程序库提供list,你便可以明确宣告一个内含int或double或Shape(使用者自定类型)元素的list(这是C++应用型式),或明确宣告一个内含Integer 元素的list(这是Java应用型式),如下:
可以这么说,当你运用继承,面对不同的类型(types)你将拥有相同的接口,而那些类型获得了多型性(多态性,Polymorphics)。当你运用泛型,你将拥有许多不同的类型,并得以相同的演算法(如排序、搜寻)作用在它们身上。举个例子,发展绘图系统时我们往往会设计一个CShape,并令所有(几何乃至非几何)形状皆衍生自它。为了让所有衍生自CShape 的形状都有自绘能力,并有相同接口draw( ),你必须使用继承技术并令draw()为一个
拟函数。此处所以采用继承和拟机制,是因为draw( )接口相同但演算法不同(不同的形状当然有不同的绘图法)