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

标签 java try-catch

就我个人而言(这并不意味着我是对的或其他什么),在方法中包含 try-catch 语句会为读者“重载”其内部结构。使用数据库时,您应该包括 SQLException、ConnectionException 等内容,也许更多。有没有办法将所有异常的责任归咎于某个对象?

我是这么想的:

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 };
}

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

请分享您对此的想法。

最佳答案

异常机制的美妙之处在于不必在它们发生的地方进行处理,而是在一个共同的地方,将许多可能的故障的处理组合在一起。所以,是的,一定要把异常的处理推迟到方便的时候。主要有两个选择:

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

  2. 仅意味着工作单元内的替代程序流的异常:这些是检查异常的良好候选者,因为它们必须尽早进行专门处理。不要在错误级别记录这些内容(它可能是警告,也可能只是信息,具体取决于上下文)。

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

关于java - 如何避免方法中的try-catch语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14945200/

相关文章:

java - 计算对象的哈希码的默认公式是什么

java - 根据条件不同的覆盖方法

java - 将 *.jar 导入 Maven 项目时遇到问题

java - 如何在JAVA中创建带有无符号整数的数据包

swift - Swift 中的抛出和重新抛出有什么区别?

php - 抛出自定义异常而没有消息

javascript promise catch in then

java - Jmeter:如何在单个请求中传递数组值?

java - try catch 循环问题

powershell - Powershell中Try/Catch的错误处理问题