2010-10-07 41 views
2

我很好奇哪些静态类型的语言没有支持 (以及历史上哪些语言没有泛型),以及他们如何处理它。静态类型语言如何在没有泛型的情况下处理?

用户是否只是在各处施放?对于基本集合,例如列表和字典,是否有一些特殊的酱油,允许这些类型是通用的?

为什么这些语言没有泛型?是为了避免潜在的复杂性或其他原因?

回答

1

下载java 1.4或1.3,自己动手尝试一下。

提示:是会有可能很多蒙上

如何应对:我见过一个组织强迫任何API不使用集合(在方法声明),但阵列才能避免混乱用户。另一种方法是创建一个仅适用于特定类的特定集合类,例如StringList

+0

“我看到一个组织迫使任何API不要使用集合(在方法声明中),而是使用数组来避免混淆用户。”是的,我在Java 1.4和之前都是这样做的。如果没有特别的理由使用'List',我宁愿使用'MyObj []'。 – 2010-11-10 17:26:52

2

C-和历史C++在它被称为C++之前 - 要求您手动将“泛型”类型扩展为非泛型(即相当于C++模板的C预处理器宏)或转义类型系统(即void指针)。

但是,数组(列表)被视为复合类型而不是单一类型。例如,你可以有一系列的短裤,但是你不能把它看作是一个字符数组,甚至是长整型数组。

在C中这不是一个真正的大问题,尽管有时不方便。它确实代表了40年前的一种权衡,将其放在背景下。

0

对此的简短回答是C++模板。与限制现有类型的泛型不同,模板是在编译时生成新类型的一种方式。像大多数代码生成解决方案一样,它不是一个非常令人满意的解决方案:因此我们继续前进。

+0

@downvoter:为什么downvote?如果在这里出现错误,那么只是有礼貌地说出它是什么。 – EJP 2010-11-02 23:17:08

+0

我的知识足够说明这一点,但我相信泛型是创建新类型的一种方法(也许您正在表达java泛型编译为从/到Object转换的视图,并且只是将您的代码限制为只允许类型安全转型(不包括非编译器转换和运行时/反射技巧),我认为这是一种错误的方式来思考它,而不是java编译时生成类型和类型检查(泛型编程),然后抛出一些类型信息(再次,这应该由知道这些东西的人审查)。 – 2010-11-08 13:54:15

+0

另外我相当确定泛型是C++模板使用的一个子集。 – 2010-11-08 13:55:11

0

Pascal以其原始形式不支持泛型。如果你想要一个链表,你需要为你的特定类型创建一个(例如IntLinkedList)。

现代版本的Pascal(例如ObjectPascal/Delphi)可能会提供某种形式的泛型。

0

C#直到v2.0才支持泛型。所以是的,那么你需要从Object大量的铸造。

我想VB.Net也是如此。

相关问题