true
的分支在前,false
的分支在后。除非是非常有把握,否则把最后的else留作报告异常最后一道屏障,确保所有情况都被考虑到了。
if (condition1) {
} else if (condition2) {
} else if (condition3) {
} else {
throw new IllegalStateException("Not in three principle conditions!")
}
下面这样的刻意制造虚假变量,很容易引起bug。因为对用户输入的命令字符串完全无法预期,下面这种截取首字母来switch的做法,很容易产生异常。
String userCommand = args[0];
char[] charArray = userCommand.toCharArray();
char action = charArray[0];
switch (action) {
case 'c':
copy(); break;
case 'd':
delete(); break;
case 'f':
format(); break;
case 'h':
help(); break;
}
枚举型是最适合做为switch的case使用的。Java在这方面的支持非常好。
int[] nums = new int[]{1,2,3};
switch (nums[0]) {
case 1:
System.out.println("One");break;
case 2:
System.out.println("Two");break;
case 3:
System.out.println("Three");break;
default:
throw new IllegalStateException("Number is not in 1,2,3!");
}
如果实在需要越过一条子句的末尾,必须用注释解释清楚为什么必须这么做。
毕竟还是if-else
语句的判断功能更加强大。当switch判断条件过于复杂的情况下,宁愿牺牲一些效率,用if-else
语句把分支表述地更清楚一点。毕竟易读性和可维护性经常还是高于效率的。