我发现Generics在Java中实现的方式过于复杂和非常丑陋(语法)。
我认为泛型的概念是正确的,但实现有点糟糕。
想知道哪种其他语言可能有最好/最简单/最干净的泛型实现。 ....或者说,也许是一种替代仿制药的说法。
答案 0 :(得分:2)
如果您正在寻找更简洁和优雅的东西,我建议您期待功能语言,如 OCaml 或 Haskell (也许 F#如果你想要一个类似于Java的API),它具有所谓的类型重建,这就是真正的泛型事物应该如何实现的......也许它有点严格,但你不会丢失表现力,你只是获得语法。
在任何情况下,你的问题都很愚蠢,你不会根据“泛型”选择一种语言,这是一个漫长而复杂的故事,通常包括你要开发的内容。每个节目都有自己的故事和需求。
答案 1 :(得分:2)
有两种方法可以按照您要求的方式简化类型系统。
Type Inference和Dynamic Typing。
类型推断
类型推断背后的想法是让编译器为您确定对象的类型,以便通过省略类型信息来简化代码。它还有其他优点。
一些带有类型推断的流行语言:
动态打字
在动态类型语言中,不需要泛型,因为您可以通过动态类型免费获取泛型。如果您想了解更多有关如何简化类型系统的信息,请参阅duck typing。 Here'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?
答案 2 :(得分:1)
我认为埃菲尔内部的仿制品可能是最干净的。
答案 3 :(得分:0)
Java Generics的创建者创建了Scala语言。与Java相比,Scala中的“泛型”(类型参数)更加清晰,就像其他任何东西一样。