提高你的Java代码质量吧:在switch的default代码块中增加AssertionError错误

一、分析 

switch后跟枚举类型,case后列出所有的枚举项,这是一个使用枚举的主流写法,那留着default语句没有任何作用,程序已经列举了所有的可能选项,肯定不会执行到default语句,看上去纯属多余! 

二、场景 

错了!这个default还是很有用的,以我们定义日志级别来举例说明,这是一个典型的枚举常量,如下所示 

enum LogLevel{ 
    DEBUG,INFO,WARN,ERROR; 
} 

一般在使用的时候,会通过switch语句来决定用户设置的级别,然后输出到不同级别的日志,代码如下 

switch(logLevel){ 
    case DEBUG: 
        … … 
    case INFO: 
        … … 
    case WARN: 
        … … 
    case ERROR: 
        … 
} 

由于把所有的枚举都列举完了,不肯能有其他的值,所有就不需要default代码块了,这是普遍的认识 

如果LogLevel枚举发生的改变,增加了一个枚举项FATAL,如果此时我们对switch语句不做任何修改,编译虽不会出问题,但是运行期间会发生非预期的错误:FATAL类型的日志没有输出。 

三、建议 

为了避免这种错误,建议在default后抛出一个AssertionError错误,这样可以保证在增加一个枚举的情况下,若其代码未修改,运行期马上就会报错,这样一来容易查找错误,方便立刻排除。 

当然也有其它方法解决,比如修改IDE工具,以Eclipse为例,可以把Java->Compiler->Errors/Warnings中的Enum Type constant nont covered on 'switch'设置为Error级别,如果不判断所有枚举就不能通过编译 


新技术,新未来!欢迎大家关注 “1024工场”微信服务号 ,时刻关注我们的最新的技术讯息! (甭客气!尽情的扫描或者长按!)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值