2011-01-20 41 views
0

我發現泛型在Java中實現的方式太複雜和非常醜陋(語法)。語言與最醜陋的泛型實現(或替代)

我認爲泛型的概念是正常的,但實現有點糟糕。

想知道哪種語言可能具有最好/最簡單/最乾淨的泛型實現。 ....或者也可以用一種替代泛型的方式來表達同樣的目的。

+1

你會根據泛型在該語言中的表現有多好選擇一種語言嗎?如果必須爲它編寫庫,泛型只會很難看。如果使用只需要使用這些庫,它非常簡單。 – 2011-01-20 21:09:39

+1

這不是主觀的或以任何方式論證。這只是比較和對比不同的編程風格。當人們因爲指出他們最喜歡的編程語言的缺陷而禁止話題時,這是非常可悲的。僅僅因爲你認爲Java是有史以來最偉大的編程語言,並不意味着其他人必須同意你的觀點。請獲得生命並停止審查你不喜歡的觀點。 – Jay 2011-01-23 20:58:19

+0

此外,我不是Java仇敵,自1998年以來,我一直是Java程序員(Java 1.1)......我只是想知道哪種語言可能會更好地實現泛型概念(例子),並在這裏得到了一些很好的答案...所以我不知道爲什麼這被禁止..但無論如何。正如我在提問之前發佈的那樣,因爲正在考慮針對沒有它們的語言的通用實現,因此是一個問題。 – 2011-01-29 18:08:36

回答

2

有兩種選擇可以按照您要求的方式簡化類型系統。

Type InferenceDynamic Typing


類型推斷

背後類型推斷的想法是讓編譯器來找出你的對象的類型,你讓你的代碼可以通過省略類型信息被簡化。它還有其他的好處。

一些流行的語言進行類型推理:


動態類型

在動態類型語言中,不需要泛型,因爲您可以通過動態類型免費獲得泛型。如果您想了解更多關於如何簡化類型系統的知識,請查閱duck typingHere's a short intro.以鴨子打字的理性。

一些流行的語言與動態類型有:


找你在Java中泛型的實現非常糟糕。這是設計。爲什麼一個蹩腳的泛型實現?當他們進行Java泛型設計時,與舊代碼存在兼容性問題,現有虛擬機需要進行大量更改才能實現它。最終他們放棄了,給了Java今天的不足之處。

http://code.stephenmorley.org/articles/java-generics-type-erasure/
http://www.ibm.com/developerworks/java/library/j-jtp01255.html
Why do some claim that Java's implementation of generics is bad?

C++C#有更好的泛型實現。如果你想要類似Java的語言和類似的泛型實現,請檢查它們。

1

我認爲艾菲爾內的仿製藥可能是最乾淨的。

2

如果你正在尋找一些更簡潔和優雅的,我建議你期待的功能語言,如OCaml的哈斯克爾(也許F#如果你想類似於Java之一的API),它有所謂的類型重構這是如何實現真正的泛型的東西..也許它有點嚴格,但你不失去表達能力,你只是獲得語法。

在任何情況下,您的問題都很愚蠢,您不會根據「泛型」選擇一種語言,這是一個漫長而複雜的故事,通常包含您將要開發的內容。每個節目都有其故事和需求。

+1

實際上泛型被認爲是一種沒有它的語言(Fantom)......這就是爲什麼我有興趣看到「最好」的方法。 – 2011-01-20 20:58:56

0

Java Generics的創建者創建了Scala語言。 Scala中的「泛型」(類型參數)與Java相比要乾淨得多,就像其他任何東西一樣。