泰山不拒细壤,故能成其高;江海不择细流,故能就其深。

——《秦·李斯 谏逐客令》


在昨天的 JavaOne 专题讲座“ JDK 7 中的小改变”中, Sun 的资深软件工程师尤瑟夫提议 Java 7 的新特征应该面向“程序员友好”( Programmer-friendly ),并且应该集中在对 Java 语言的小改变上。其中在整数变量中允许使用二进制值以及 switch 语句允许使用字符串作为表达式的值,就是他提议的两个改变。
在整数型变量,如 byte short int 以及 long 中合法使用二进制值,使得在这个领域中的编程提供了方便。如:
byte mask = b0011;       // 或者 0b0011 ,十进制值为 3
为了增强可读性,允许使用下划线,而且允许在十进制值中使用下划线。如:
int intMask = 0b1100_0011;                // 在二进制值中使用下划线
long longMask = 9_223_372_036_854_775_807L;   // 在十进制值中使用下划线

尤瑟夫提议的在 Java 7 中第二个小改变是 switch 语句中允许使用字符串作为其表达式的值。在目前使用的所有 Java 版本中, switch 语句的语法格式为:
switch (integralExpression) {
       case integralValue_1 : statements;
                                     break;
       case integralValue_2 : statements;
                                     break;
       …
       default:                   statements;  // 可选项
}
其表达式 integralExpression 的值规定为除 long 之外的整数以及字符,但不允许是字符串。
尤瑟夫对 switch 语句的小改进并没有改变这个语句的语法,只是将字符串也作为 switch 的合法表达式和值。如:
String s = someDefinedString;
switch (s) {
       case “foo” : return 1;
       case “bar” : return 2;
}
这种改变的确是小,但给编程带来了方便。这也符合对 integral expression 的定义,即字符串也是一种代码确定的整数值。
由于可以对 Character Byte Short Integer 对象做自动卸箱 (auto-unboxing) ,所以期待中的 Java 7 将对 switch 语句做出如下新定义:
switch 语句中表达式的值可以是 char byte short int Character Byte Short Integer String enum 类型;否则将产生编译错误。
如下是新 switch 语句的更多应用例子:
1 .利用字符串作为 switch 语句的选项值,调用 menu 对象的不同方法。
String menu = myMenu.getMenu(); //getMenu 返回用户选择的菜单
switch (menu) {
    case “open”:    myMenu.openFile();  // 调用对象 menu 的方法
                    break;
    case “save”:    myMenu.saveFile();
                    break;
    case “exit”:    myMenu.exit();
                    break;
    default:    System.out.println(" 菜单选项错误 ");
    }
2 .利用字符串作为 switch 的选项确定字符串变量 day 的值是否是工作日或者周末休息日。
switch(dayOfWeek) {     //dayOfWeek 为定义了的字符串
    case “ 1 到周五 ”    :   day = " 工作日 ";
    case “ 周六到星期天 ”   :   day = " 周末休息 "
}
完整程序例子和尤瑟夫提议的其他对 Java 7 的小改变,见即将由清华大学出版社出版的《 Java 编程艺术》配套资源下载网页。
据尤瑟夫和其他 Java 7 领衔工程师透露, Java 7 将在今年年底或明年年初正式发表。