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

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

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

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

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

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

感谢任何帮助。

有帮助吗?

解决方案

<!>

QUOT;通用QUOT <!>;正在谈论实施。你写了一个<!> quot; Generic <!> quot;列表实现适用于任何类型,而不必为您要使用的每种类型编写特定的实现。

其他提示

我认为对这类问题的正确答案几乎总是<!>历史原因,主要是<!>“。泛型也可以被称为<!> quot; schemes <!> quot;或<!> quot; classes <!> quot;或<!> quot; type families <!> quot;或<!> quot; genera <!> quot;或<!> quot;类型函数<!> quot;或<!> quot; statics <!> quot;或<!> quot;希腊语类型<!> quot;或者其他一百万件事。很久以前有人决定使用<!>“; generic <!>”这个词,它就卡住了。

<!>

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

  

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

这是唯一使用<!> quot; generic <!> quot;在文件中。我不清楚它是如何打算的。但是到了1977年7月( <!>“; Tinman <!>”; )有一个关于泛型的段落,这个术语显然具有特定的含义:

  

12D。一般定义

     

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

到1978年6月( <!> quot; Steelman <!>; )它是行话;还有其他用途的术语<!> quot; generic <!> quot;在文档的其他部分,明确提到此功能。在完成的语言中,generic是一个保留字。

这些文件的作者列在网站上,大概大部分仍在。打电话给他们并问他们记得什么是很好的。


最早似乎相关的使用<!> quot; generic <!> quot;我在学术界发现的是罗宾米尔纳的 <!>;一个理论编程中的类型多态性<!> ;(1978)(并且他感到有必要通过<!>“泛型<!>”来解释他的意思,因此它不能被普遍使用当时在学术界):

  

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

<!>“;通用类型变量<!>”;成了CS行话。

bool Equals(int x, int y)

上面的方法只能比较整数,所以我们可以说它是专用的来比较整数。

bool Equals<T>(T x, T y);

上述方法可以比较任何类型的值,因此我们可以说它对于任何特定类型都不是专用 - 它是泛型

我不想进入语言的语义(英语,而不是java),并且冒着用同义反复回答你的风险;一般的方法被称为泛型,因为正如你所说,它可以用于一般意义上,它没有特定的类型,一般可以使用

好的,带着一点点盐,因为我 完全 猜测,但我想知道它是否可能是<!>的生化错误类型QUOT <!>;

从概念上讲,当您将List专门化为List <!> lt; String <!> gt;,它会生成一个新类型。至少,这是它在C ++模板和C#泛型中的工作方式。

在Java中,由于编译器使用类型擦除丢弃了参数化,实际上 不会 生成一个新的专用类型,所以谁知道?

我想你可以说Java实现了生成类型的通用版本:)


ON EDIT:

这是另一种观点......

类型List <!> lt; String <!> gt;当他们引用<!> quot; generic <!>时,并不是他们所说的。类型。我认为术语实际上是指List <!> lt; T <!> gt; type,类型以其通用形式存在的方式。列表LT <!>; String <!> gt;是通用List <!> lt的专业化; T <!> gt;。

如果他们称之为<!>“;输入参数<!>”;人们会把它与Type类型的参数混淆。

此外,ArrayList不是<!> quot; generic <!> quot;。它仅适用于对象类型。如果你问它什么,它会给你一个对象参考。这是一种非常具体的行为。

获取对象的类不是通用的,它非常具体地采用类型,它本身就是泛型类型。另一方面,泛型类可以与任何特定类型一起使用。

因为您正在创建<!>“; Generic <!>”;能够以相同的方式在任何类型(在您指定的约束内)上操作的代码......

您熟悉的一个好例子是Add运算符几乎是任何语言......它可以<!>添加<!>添加<!>整数,浮点数,双精度数,小数,二进制数,十六进制数,无论它们是否有标记,未标记,它们有多少位等等......

我不是<!> quot; native <!> quot;英语发言者,所以我可能错了,但是<!>“泛型<!>”的要点;是定义泛型类型,不是吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top