1700446117
1700446118
case Season.Spring.ordinal():
1700446119
1700446120
……
1700446121
1700446122
case Season.Summer.ordinal():
1700446123
1700446124
……
1700446125
1700446126
}
1700446127
1700446128
}
1700446129
1700446130
看明白了吧,switch语句是先计算season变量的排序值,然后与枚举常量的每个排序值进行对比的。在我们的例子中season变量是null值,无法执行ordinal方法,于是报空指针异常了。
1700446131
1700446132
问题清楚了,解决方法也很简单,在doSports方法中判断输入参数是否是null即可。
1700446133
1700446134
1700446135
1700446136
1700446138
编写高质量代码:改善Java程序的151个建议 建议86:在switch的default代码块中增加AssertionError错误
1700446139
1700446140
switch后跟枚举类型,case后列出所有的枚举项,这是一个使用枚举的主流写法,那留着default语句似乎没有任何作用,程序已经列举了所有的可能选项,肯定不会执行到default语句,看上去纯属多余嘛!错了,这个default还是很有用的。以我们定义的日志级别来举例说明,这是一个典型的枚举常量,如下所示:
1700446141
1700446142
enum LogLevel{
1700446143
1700446144
DEBUG, INFO, WARN, ERROR;
1700446145
1700446146
}
1700446147
1700446148
一般在使用的时候,会通过swtich语句来决定用户设置的级别,然后输出不同级别的日志,代码如下:
1700446149
1700446150
switch(logLevel){
1700446151
1700446152
case DEBUG:
1700446153
1700446154
……
1700446155
1700446156
case INFO:
1700446157
1700446158
……
1700446159
1700446160
case WARN:
1700446161
1700446162
……
1700446163
1700446164
case ERROR:
1700446165
1700446166
……
[
上一页 ]
[ :1.700446117e+09 ]
[
下一页 ]