就我个人而言(这并不意味着我是对的或其他什么),在方法中包含 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 };
}
这样,外部类将负责其所有内部类方法抛出的异常。 当然,如果认为我的解决方案是好的,我就不会问这个问题。这只是一个例子,让你理解这个想法。
请分享您对此的想法。
最佳答案
异常机制的美妙之处在于不必在它们发生的地方进行处理,而是在一个共同的地方,将许多可能的故障的处理组合在一起。所以,是的,一定要把异常的处理推迟到方便的时候。主要有两个选择:
必须中止当前工作单元的故障:在包含整个事务范围的级别上处理它们,并统一执行(通常是一条日志条目和一条发送给上游客户端的错误消息);
仅意味着工作单元内的替代程序流的异常:这些是检查异常的良好候选者,因为它们必须尽早进行专门处理。不要在错误级别记录这些内容(它可能是警告,也可能只是信息,具体取决于上下文)。
不幸的是,Java 的检查异常使得第一个选项更难实现,因为途中的每个方法都必须声明它可能抛出的所有检查异常。还有一些常见的陷阱:Eclipse 和其他工具提供用样板 try-catch 包围您的代码,而您应该让异常向上传播。当您实现的方法没有声明您遇到的检查异常时,会出现特别困难的情况,迫使您过早处理它。在这种情况下,必须将检查的异常包装到RuntimeException
中并重新抛出它。这是相当不明显的,并且会导致许多错误,或者至少会导致重复的错误日志条目。
关于java - 如何避免方法中的try-catch语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14945200/