打字猴:1.700449343e+09
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 ]  [ 下一页 ]