从去年到现在,从.NET转向Java开发(只是因为项目原因,绝对与平台好坏没有关系)差不多有一年的时间了。通过这一年时间也有些感触,想从几个面比较一下这两个平台。希望能做到客观公正。
语言
我原来是使用C#语言的,和现在的Java语言相比,现在的Java语言语法就停留在C# 2.0这个年代。语法结构都非常传统,中规中矩。很突出的一点是,因为缺少对闭包的支持,有些用C#很容易做到的,用Java需要写很多废话代码。
前几天InfoQ上发表了一篇英国卫报逐步采用Scala替换Java的文章里一句话用的很好:看Java的代码很容易让你只见树木,不见森林。因为为了实现某个功能,你需要太多的支撑代码,而实现功能的关键代码却迷失了。
举个例子:我需要一个排好序的用户列表,排序的依据是用户名字。很简单的需求对不。自然的代码肯定是这样的:
IList<User> users = …
users.OrderBy(user => user.Name);
而如果用Java实现同样的功能你可能要这样写:
List<User> users = …
Collections.sort(users,new Comparator<User>() {
public int compare(User left, User right) {
return left.getName().compareTo(right.getName());
}
});
第一:没有扩展方法的支持,只有借助静态的辅助类
第二:没有闭包的支持,非要写个难看的匿名类
其实我们只需要一个OrderBy,一看就明白,但现在多了这么多“无用”的代码,反而核心的价值(order by)却显得不那么重要了。这还是一个很简单的例子,在实际的项目中你会为此付出更多的代价,你要写出一堆味同嚼蜡的代码才能实现你想要的那个功能,而那个功能其实是很显而易见。
所以在语言层面,Java没有任何亮点,只觉得罗里罗嗦。
关于语言层面的比较,老赵写过很多,而且非常精彩,建议去欣赏一下。
不过Java也有那么很少几个有点意思的小东西:比如静态导入(脑袋提醒,这东西很早就在VB里出现了)、以及Java对Annotation的特殊支持让我们可以做一个更有意思的事情。 阅读全文