我试图以语义方式理解泛型。例如,当我读到人们将它们称为可以设置策略的结构时,抽象类似乎对我来说很有用。当我读到人们时,接口被捕捉称为合作合同。
有哪些好方法可以考虑可以帮助我将它们与其他OO结构区分开来并编写更智能的API的泛型?
答案 0 :(得分:1)
将泛型类视为制作其他类的模板(类似地,泛型函数是用于制作其他函数的模板)。类型参数在模板中用作开口:通过在其中插入具体类型,可以将泛型类或泛型函数转换为实际类或函数。类型参数“穿过”模板中的指定孔,产生完整的定义。
答案 1 :(得分:1)
您似乎希望从自上而下的角度来理解您的理解。 “它是什么”在定性意义上,然后从那里得出真正的意义。是否更容易简单地了解这些不同的构造做而不是试图提出标签?即从自下而上的角度来看待它,并从你现在已经了解的第一手资料中推断出你自己的定性描述。
抽象类要求您实现属性或方法,并且无法实例化。它与界面的区别是什么?它要求子类选择您的子类作为其唯一的基类。接口没有这样的限制,但要求您在实现中定义其整个行为,而不是依赖于在基类中定义的某些行为。
类似地,泛型允许您将类型作为可由调用者指定的变量引入。其效用通常类似于方法参数,只是采用更高的水平。换句话说,方法参数允许您根据调用者指定的某些输入改变实现。通用参数允许您根据调用者指定的某些(其他)输入(即类型)来改变实现。
肯定很清楚为什么List<T>
比ArrayList
更有用。我不确定为什么隐喻真正有助于理解为什么。
答案 2 :(得分:0)
您可以将它们视为对象类型的包装。您正在创建将为其实例化的任何类型的对象执行某些操作的函数,因此它就像一个模板,它将为多种类型的对象执行相同的工作。
微软对泛型的介绍也可能有一些很好的描述
http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx