zoukankan      html  css  js  c++  java
  • 错误处理的返回--异常还是返回值

     推荐使用异常:

     因为异常设计就是为了决解:

       什么出了错?

       在哪出的错?

       为什么出错?

     1.通过使用异常可以明确 错误的类型,错误的原因,错误出现的地方并且调用者强制处理,这提高程序的健壮性(robust)。而返回值方式需要调用者主动去处理。

     2.使用异常可以使代码更加优雅/可读性提高。不用写各种if/else判断情况,只要发生了异常则直接终止程序的执行。

      例子:

      

    public class MainAction {
        @Autowired
        MyService myService;
    
        public void doTest() {
            String msg = null;
    
            if (myService.operationA()) {
                if (myService.operationB()) {
                    if (myService.operationC()) {
                        myService.operationD();
                    } else {
                        msg = "operationC failed";
                    }
                } else {
                    msg = "operationB failed";
                }
            } else {
                msg = "operationA failed";
            }
            if (msg != null) {
                tip(msg);// 提示用户操作失败
            }
        }
    
        public void tip(String msg) {
        }
    }
    
    作者:HowToPlay
    链接:https://www.zhihu.com/question/28254987/answer/40192291
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    使用异常的方式:

    public class MainAction {
        @Autowired
        MyService myService;
    
        public void doTest() {
            try {
                if (!myService.operationA()) {
                    throw new OperationFailedException("operationA failed");
                }
                if (!myService.operationB()) {
                    throw new OperationFailedException("operationB failed");
                }
                if (!myService.operationC()) {
                    throw new OperationFailedException("operationC failed");
                }
                myService.operationD();
            } catch (OperationFailedException e) {
                tip(e.getMessage());
            } catch(Exception e){
                tip("error");
            }
        }
    
        private class OperationFailedException extends Exception {
            public OperationFailedException(String message) {
                super(message);
            }
        }
    
        public void tip(String msg) {
        }
    }
    
    或者在sevice层的操作中直接抛出异常,则可以改写为
    try{
    myService.operationA 
    myService.operationB
    myService.operationC
    myService.operationD 
     
    }catch(Exception e){
      ......
    }
     
    
    
  • 相关阅读:
    [转] 使用Git进行小项目代码管理
    [转] Linux抓包工具tcpdump详解
    几天都是气温骤降,感冒了还没有收获
    1128进入自学实习培训路
    hdu 4952
    hdu 4937 2014 Multi-University Training Contest 7 1003
    hdu 4941 2014 Multi-University Training Contest 7 1007
    hdu 4939 2014 Multi-University Training Contest 7 1005
    hdu 4932 BestCoder Round #4 1002
    POJ 2362
  • 原文地址:https://www.cnblogs.com/predisw/p/5287806.html
Copyright © 2011-2022 走看看