[ZZ][推荐][阅读]C#、Java以及C++的泛型

来自 lxwde @ csdn  的 [翻译]C#、Java以及C++的泛型

附片段,可以琢磨含金量了。

Bruce Eckel: 能否就泛型做一个简短的介绍?

Anders Hejlsberg: 泛型的本质就是让你的类型能够拥有类型参数。

它们也被称为参数化类型(parameterized types)或者参数的多态(parametric polymorphism)。

经典的例子就是一个List集合类。List是一个方便易用的、可增长的数组。它有一个排序方法,你可以通过索引来引用它的元素,等等。

现今,如果没有参数化类型,在使用数组或者Lists之间就会有些别扭的地方。

如果使用数组,你得到了强类型保证,因为你可以定义一个关于Customer的数组,但是你没有可增长性和那些方便易用的方法。

如果你用的是List,虽然你得到了所有这些方便,但是却丧失了强类型保证。

你不能指定一个List是关于什么的List。它只是一个关于Object的List。

这会给你带来一些问题。类型检测必须在运行时刻做,也就意味着没有在编译时刻对类型进行检测。

即便是你塞给List一个Customer对象然后试图取出一个String,编译器也不会有丝毫的抱怨。

直到运行时刻你才会发现他会出问题。另外,当把基元类型(primitive type)放入List的时候,还必须对它们进行装箱(box)。

基于上述所有这些问题,Lists与Arrays之间的这种不和谐的地方总是存在的。到底选择哪个,会让你一直犹豫不决。

泛型的最大好处就是它让你有了一个两全其美的办法(you can have your cake and eat it too),因为你可以定义一个List[读作:List of T]。

当使用一个List的时候,你可以实实在在地知道这个List是关于什么类型的List,并且让编译器为你做强类型检测。

这只是它最直接的好处。接下来还有其它各种各样的好处。当然,你不会仅仅想让List拥有泛型。

哈希表(Hashtable)或者字典(Dictionary)——随便你怎么叫它——把键(keys)映射到值(values)。

你可能会想要把Strings映射到Customrs,或者ints到Orders,而且是以强类型化的方式。

此条目发表在未分类分类目录。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。 必填项已用*标注