泰山不拒细壤,故能成其高;江海不择细流,故能就其深。
――《秦・李斯
谏逐客令》
在昨天的
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
将在今年年底或明年年初正式发表。