2013-04-06 51 views
4

我想以语义的方式理解泛型。例如,当我读到人们将它们称为可以制定政策的结构时,抽象类似乎适合我。当我读到人们将它们称为协作合同时,接口就会崩溃。语义上代表泛型

什么是一些好的方法来思考泛型,这可能会帮助我区分它们与其他OO结构并编写更智能的API?

+0

将它们视为类型模板。 – RBarryYoung 2013-04-06 01:00:09

回答

1

觉得作为模板,使其他类(类似,通用的功能是用于制作其他功能模板)。类型参数用作模板中的开口:通过在其中插入具体类型,可以将泛型类或泛型函数变为真实的类或函数。类型参数“粘贴”模板上的指定孔,产生完整的定义。

+0

这很有趣。如果我正确地理解了这一点,就好像您正在标记由调用方定义的方法/类签名摘要的一部分。暖和吗?或更冷? – cocogorilla 2013-04-06 00:49:00

+0

@ user1902664正确,您会保留部分课程未完成,直到用户提供缺少的类型信息。 – dasblinkenlight 2013-04-06 00:58:49

+0

接受这个答案对我来说最有帮助,让我的大脑以不同的方式思考他们。谢谢。 – cocogorilla 2013-04-06 01:36:17

0

您可以将它们视为对象类型的包装。你正在创建一些函数来处理实例化的任何类型的对象,所以它就像一个将为多种类型的对象执行相同工作的模板。

微软的介绍,仿制药可能有一些很好的说明以及泛型类的

http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx

1

看来你想从自上而下的角度来理解你的理解。从定性的角度来看,它是“什么”,然后从那里推导出真正的意义。简单地学习这些不同的结构而不是试图拿出标签是不是更容易?即从自下而上的角度来看它,并根据您现在已经了解的内容推断出您自己的定性描述。

抽象类需要你实现一个属性或方法,并且不能被实例化。它与界面有什么区别?它要求子类选择你的唯一基类。接口没有这样的限制,但要求你在实现中定义它的整个行为,而不是依赖于在基类中定义的一些行为。

同样,泛型允许您将类型作为变量引入,可以由调用方指定。这一功能类似于一般的方法参数,只是更高一级。换句话说,方法参数允许您根据调用者指定的某些输入来改变实现。通用参数允许您根据调用者指定的一些(其他)输入(即类型)来改变实现。

当然很清楚为什么List<T>ArrayList更有用。我不确定为什么隐喻对理解原因有帮助。

+0

我真的很感谢你的努力。但我不得不大声笑......我走了一半,所有的细节都转向了我大脑中的狼吞虎咽。我个人很难从这些部分获得洞(我的妻子没有)。如果我能得到一个形态...然后突然部分开始落到位。我见过很多列表 vs ArrayList的例子,但我最终将泛型视为容器,这是限制性的。 虽然你的参数比较有帮助。谢谢。 – cocogorilla 2013-04-06 01:15:30

+0

@ user1902664,但是你明白为什么'List '作为这些类的*消费者*优于'ArrayList'?如果是这样,那么对于您来说,尝试自己实现其中一个类(或类似它的类)是一个简单的步骤。一旦你做到了,我保证它会随着理解而来。 – 2013-04-06 01:16:43

+0

是的。作为列表和ArrayList的消费者,我完全理解优势。实际上,试图实现一个原因就是为什么我问这个问题......因为我不确定我是在抓这个原因,所以我很不确定我是否正确地使用它。也许一个界面可以满足我的目的,或者一个通用的界面真的很有用。我不能说,直到我把握它。 – cocogorilla 2013-04-06 01:29:43