如何避免方法中的try-catch语句?

LaR*_*RRy 2 java try-catch

对我个人来说(这并不意味着我是对的),包括try-catch语句在方法'重载'他们的内部结构为读者.使用DB时,您应该包括SQLExceptions,ConnectionExceptions等等.有没有办法将所有例外的责任放在某个对象上?

我想是这样的:

enum TaskEnum {
    doSmth1, doSmth2, doSmth3, doSmth4
}

class OuterClass {

    doWhatever(TaskEnum task, String… args) {
        try {
        switch(task) {
                case (doSmth1): InnerClassInstance.execute1(args); break;
                case (doSmth2): InnerClassInstance.execute2(args);break;
                case (doSmth3): InnerClassInstance.execute3(args);break;
                case (doSmth4): InnerClassInstance.execute4(args);break;

        } catch(Exception e) {
                 e.printStack()}
         }
     }
}

class InnerClass {    
    execute1(String args) throws Exception() {bla-bla-bla};
    execute2(String args)throws Exception() { bla-bla-bla };
    execute3(String args)throws Exception() { bla-bla-bla };
    execute4(String args)throws Exception() { bla-bla-bla };
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,外部类将负责所有内部类方法抛出的异常.当然,如果认为我的解决方案是好的,我不会问这个问题.这只是一个例子,让你理解这个想法.

请分享您对此的看法.

Mar*_*nik 5

异常机制的优点在于它们发生的地方不必处理它们,而是在一个共同的地方,将处理许多可能的故障组合在一起.所以是的,肯定会推迟异常的处理,直到方便的时刻.有两个主要选择:

  1. 必须中止当前工作单元的故障:在包含整个事务范围的级别处理所有故障,并统一执行(通常是日志条目和上游客户端的错误消息);

  2. 例外情况仅表示工作单元内的替代程序流程:这些是检查异常的良好候选者,因为它们必须特别及早地处理.不要将它们记录在错误级别(它可能是警告或只是信息,具体取决于上下文).

遗憾的是,Java检查的异常使得第一个选项更难实现,因为路上的每个方法都必须声明它可能抛出的所有已检查异常.还有一些常见的陷阱:Eclipse和其他工具提供了使用样板文件try-catch来包围您的代码,而应该让异常向上传播.当您实现的方法没有声明您遇到的已检查异常时,会出现特别困难的情况,迫使您过早处理它.在这种情况下,必须已检查的异常包装RuntimeException并重新抛出.这是非常明显的并且导致许多错误,或者至少重复的错误日志条目.