1700449343
1700449344
}catch(RuntimeException e){
1700449345
1700449346
//只要是抛出异常,则认为是不包含
1700449347
1700449348
}
1700449349
1700449350
return result;
1700449351
1700449352
}
1700449353
1700449354
判断一个枚举是否包含指定的枚举项,这里会根据valueOf方法是否抛出异常来进行判断,如果抛出异常(一般是IllegalArgumentException异常),则认为是不包含,若不抛出异常则可以认为包含该枚举项,看上去这段代码很正常,但是其中却有三个错误:
1700449355
1700449356
异常判断降低了系统性能。
1700449357
1700449358
降低了代码的可读性,只有详细了解valueOf方法的人才能读懂这样的代码,因为valueOf抛出的是一个非受检异常。
1700449359
1700449360
隐藏了运行期可能产生的错误,catch到异常,但没有做任何处理。
1700449361
1700449362
我们这段代码是用一段异常实现了一个正常的业务逻辑,这导致代码产生了坏味道。要解决此问题也很容易,即不在主逻辑中使用异常,代码如下:
1700449363
1700449364
//判断一个枚举是否包含String枚举项
1700449365
1700449366
public static<T extends Enum<T>>boolean Contain(Class<T>c, String name){
1700449367
1700449368
//遍历枚举项
1700449369
1700449370
for(T t:c.getEnumConstants()){
1700449371
1700449372
//枚举项名称是否相等
1700449373
1700449374
if(t.name().equals(name)){
1700449375
1700449376
return true;
1700449377
1700449378
}
1700449379
1700449380
}
1700449381
1700449382
return false;
1700449383
1700449384
}
1700449385
1700449386
异常只能用在非正常的情况下,不能成为正常情况的主逻辑,也就是说,异常只是主场景中的辅助场景,不能喧宾夺主。
1700449387
1700449388
而且,异常虽然是描述例外事件的,但能避免则避免之,除非是确实无法避免的异常,例如:
1700449389
1700449390
public static void main(String[]args){
1700449391
1700449392
File file=new File(“文件.txt”);
[
上一页 ]
[ :1.700449343e+09 ]
[
下一页 ]