Java5.0引入的泛型,我至今仍然认为是一个失败的语言演进方向,程序语言向弱化类型、甚至没有类型演进的时候,还要泛型作设么? 终于,Java6.0引入了令人激动脚本框架,内嵌JavaScript支持。这也许是Java平台向轻量、脚本化、简化Java语法方向演进的开始。
以前一篇Blog中对Java5.0泛型的评论:
最近,用Java 5.0开发opengoss系统,我会陆续把对5.0新特性的个人理解发表于此,以供讨论和学习。
首先, 是泛型。这是我非常不解的地方,为什么Java要支持泛型? 我个人对程序语言的理解认为:一个语言中的元概念(Atomic Concept)越少, 就越强大、灵活和易用。既然Java中所有的对象都是基于Object这个单根基类,那要泛型有何用?我很少使用C++, 但我觉得C++中是因为没有单根的基类, 所以引入泛型的解决方案。那么现在,Java5.0中等于对同一问题引入不同的解决方案, 让Java程序变得Ugly。
我们来看看Java5.0引入泛型的理由:
map.put("key", new Object());
上述程序编译时出错。我非常想知道,在没有泛型的检查之前,我们的程序有多少ClassCastException抛出来?
String value = map.get("key");
如果没有泛型, 你不得不强制转换,
Map map = new HashMap();
String value = (String)map.get("key");
但你觉得上下哪段代码更易用, 更易读? 简单的看代码量就知道了,一目了然!
个人评论:泛型是一个糟糕的演讲, 可能为了满足某些组织和程序员的个人习惯,或与C#竞争作出的商业决策。Ruby式的动态类型, 才是正确的演讲方式。
以前一篇Blog中对Java5.0泛型的评论:
最近,用Java 5.0开发opengoss系统,我会陆续把对5.0新特性的个人理解发表于此,以供讨论和学习。
首先, 是泛型。这是我非常不解的地方,为什么Java要支持泛型? 我个人对程序语言的理解认为:一个语言中的元概念(Atomic Concept)越少, 就越强大、灵活和易用。既然Java中所有的对象都是基于Object这个单根基类,那要泛型有何用?我很少使用C++, 但我觉得C++中是因为没有单根的基类, 所以引入泛型的解决方案。那么现在,Java5.0中等于对同一问题引入不同的解决方案, 让Java程序变得Ugly。
我们来看看Java5.0引入泛型的理由:
- 编译时检查。 Java5.0中的泛型是一个编译时的概念(运行时JVM是根本不Care泛型的:), 可以作为一个编译时的校验:
map.put("key", new Object());
上述程序编译时出错。我非常想知道,在没有泛型的检查之前,我们的程序有多少ClassCastException抛出来?
- 使Java语言更易于使用:
String value = map.get("key");
如果没有泛型, 你不得不强制转换,
Map map = new HashMap();
String value = (String)map.get("key");
但你觉得上下哪段代码更易用, 更易读? 简单的看代码量就知道了,一目了然!
个人评论:泛型是一个糟糕的演讲, 可能为了满足某些组织和程序员的个人习惯,或与C#竞争作出的商业决策。Ruby式的动态类型, 才是正确的演讲方式。