技术开发 频道

Java 2007:新年展望

  


期待 Java 7

Dolphin 不会在 2007 年发布。2008 年是更为现实的目标。那就是说,工作尚在进行中,它的一些功能也许会作为早期的标准扩展或至少作为 beta 登场。

遗憾的是,为一门语言添加功能远比删除功能要简单得多。几乎不可避免地,随着时间的推移,语言不是朝着简单的方向发展,而是越来越复杂,越来越让人困惑。即使是那些单独看起来很好的功能,在彼此叠加后也会出现问题。

令人遗憾,Java 社区没有接受这个教训,尽管这种失败并无特殊性。但总有一些太酷又太让人激动的新语法令语言设计者难以抗拒 —— 即便这样的新语法不能解决任何实际问题。于是对 Java 7 的新语言功能就有了巨大的要求,包括闭包、多继承和操作符重载。

我猜想在这一年结束前,会在 Java 7 beta 中看到闭包,也许还能看到操作符重载(有五成的把握),但不会出现多继承。Java 中有太多东西是基于单个根的继承层次。没有可行的方式改进多继承,使之适应这门语言。

目前有许多语法糖方面的提议,有一些有意义,有一些没有。许多提议都专注于将像 getFoo() 这样的方法替换为像 -> 这样的操作符。

列表

最有可能的是使用数组语法来实现集合访问。例如,不再采用下面这样的代码:

List content = new LinkedList(10);
content.add(0, "Fred");
content.add(1, "Barney");
String name = content.get(0);


而是编写如下代码:

List content = new LinkedList(10);
content[0] = "Fred";
content[1] = "Barney";
String name = content[0];


另一种可能性是:允许为列表使用数组初始化程序语法。例如:

LinkedList content = {"Fred", "Barney", "Wilma", "Betty"}

这两项提议都可以在不改变虚拟机(VM)的前提下由编译器稍显神通即可实现,这是任何修订过的语法的一项重要特征。这两项提议都不能使任何现有的源代码失效或重定义现有的源代码,对于新语法来说,这是一个更为重要的问题。

真正能够影响开发人员生产力的特性功能应该是用于管理表、树和映射表的内置原语,比如在使用 XML 和 SQL 时遇到的那些。JavaScript 下的 E4X 项目和 Microsoft 的 Cω 和 Linq 项目是实现这一想法的先驱,但可悲的是,Java 平台似乎错过了这个机会。如果有人想要通过编译器来玩一个潜在的救场的游戏,这里是一个不容错过的好地方。

属性

很可以还有一些针对属性访问的语法糖。一个建议是使用 -> 作为调用 getFoo 和 setFoo 的缩写。例如,不再使用如下代码:
Point p = new Point();
p.setX(56);
p.setY(87);
int z = p.getX();

而是使用如下代码:

Point p = new Point();
p->X = 56;
p->Y = 87;
int z = p->X;

也有人建议用另外一些符号来代替 ->,包括 . 和 #。

将来,您有可能必须将 Point 类中的相关字段显式地标识为属性,如:

public class Point {

public int property x;
public int property y;

}

我个人对此并未产生什么深刻的印象。我宁愿 Java 平台采纳一项更为激进的方法,让我们可以真正地使用公共字段。然而,如果将 getter 或 setter 定义为与字段相同的名称,然后读写字段就会自动地分派到相应方法中。这样做所使用的语法更少,也更加灵活。

0
相关文章