当前位置:  开发笔记 > 程序员 > 正文

为什么泛型称为泛型?

如何解决《为什么泛型称为泛型?》经验,为你挑选了2个好方法。

冒着成为村里白痴的风险,有人可以向我解释为什么仿制药被称为仿制药吗?我理解它们的用法和好处,但如果泛型的定义是"通用的"而泛型集合是类型安全的,那么为什么这不是用词不当呢?

例如,ArrayList可以保存任何对象:

ArrayList myObjects = new ArrayList();
myObjects.Add("one");
myObjects.Add(1);

而字符串类型的泛型集合只能包含字符串:

var myStrings = new List();
myStrings.Add("one");
myStrings.Add("1");

我不清楚为什么它被称为"通用".如果答案是"......这使得设计类和方法可以推迟一个或多个类型的规范,直到通过客户端代码声明和实例化类或方法." 从这里开始,我认为这是有道理的.也许我有这种精神失误,因为我只是在Java引入泛型之后开始编程,所以我不记得他们之前的时间.但还是......

任何帮助表示赞赏.



1> Herms..:

"Generic"正在谈论实施.您编写了一个适用于任何类型的单个"通用"列表实现,而不必为您要使用的每种类型编写特定的实现.


事实上,"特定通用"通常被称为"专业化",但它取决于语言.例如,在.NET中,我们谈到"开放泛型类型"(那些仍然具有未填充类型参数的类型)和"封闭泛型类型"(那些没有).

2> Jason Orendo..:

我认为对这类问题的正确答案几乎总是"历史原因,主要是".泛型也可以被称为"方案"或"类"或"类型族"或"属"或"类型函数"或"静态"或"希腊类型"或任何一百万种其他东西.很久以前有人决定使用"通用"这个词,它就卡住了.

Java意义上的"通用"至少可以追溯到20世纪70年代中期.美国国防部正在为其新的编程语言(将成为ADA)修改一份需求文档.早期的草案("伍德曼",1975年8月)说:

可扩展语言中需要编译时间参数,以允许指定通用过程和数据结构(如堆栈和队列),而无需重复每种元素类型的定义.

这是文档中"泛型"的唯一用法.我不清楚它是如何打算的.但到了1977年7月("Tinman"),有一个关于仿制药的段落,这个术语显然是指具体的东西:

12D.一般定义

应该可以定义具有在每次调用时在转换期间实例化的参数的函数,过程和类型.这些参数可以是任何定义的标识符(包括变量,函数或类型的标识符),表达式或语句.与所有其他参数一样,这些参数应在调用的上下文中进行评估.

到1978年6月("钢铁侠")它成立了行话; 在文档的其他部分中还有"泛型"一词的其他用法,明确提到了这一特性.在完成的语言中,generic是一个保留字.

这些文件的作者在网站上列出,大概大多数仍然存在.打电话给他们并问他们记得什么是很好的.


我在学术界发现的最早似乎相关的"通用"用法是罗宾米尔纳的"编程类型多态性理论"(1978)(并且他觉得有必要通过"泛型"来解释他的意思,所以它不能有当时在学术界普遍使用):

所以这是map的泛型类型,也就是说,在这个声明范围内任何出现的map都必须分配一些这种类型的替换实例.

"通用类型变量"成为CS行话.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有