我很好奇哪些静态类型的语言没有泛型支持 (在较小程度上,哪些语言在历史上没有仿制药),以及它们如何处理它。
用户是否只是在场所投放?是否有一些特殊的基础集合,如列表和词典,允许这些类型是通用的?
为什么这些语言没有泛型?这是为了避免潜在的复杂性或其他原因吗?
答案 0 :(得分:2)
C和历史C ++,在它被称为C ++之前 - 需要您手动将“泛型”类型扩展为非泛型(即C预处理器宏等效于C ++模板)或转义类型系统(即void指针)
但是,数组(列表)被视为复合类型而不是单一类型。例如,你可以拥有一系列短裤,但你不能把它当作一系列字符,甚至是多头。
这在C中并不是一个很大的问题,但有时不方便。它确实代表了40年前的权衡,将其置于背景中。
答案 1 :(得分:1)
下载java 1.4或1.3并亲自试用。
提示:是的,可能会有很多演员阵容
如何处理:我见过一个组织强制任何API不使用集合(在方法声明中)但是数组以避免混淆用户。另一种方法是创建一个仅适用于某些类的特定集合类,例如StringList
等
答案 2 :(得分:0)
对此的简短回答是C ++模板。与限制现有类型的泛型不同,模板是在编译时生成新类型的一种方式。像大多数代码生成解决方案一样,它不是一个非常令人满意的解决方案:因此我们继续前进。
答案 3 :(得分:0)
Pascal的现代版本(例如ObjectPascal / Delphi)可能提供某种形式的泛型。
答案 4 :(得分:0)
在v2.0之前,C#不支持泛型。是的,那么你需要从Object
进行大量的投射。
我想VB.Net也是如此。