2010-10-07 40 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也是如此。

相關問題