Java 如何避免方法中的try-catch语句?
就我个人而言(这并不意味着我是对的或是别的什么),在方法中包含try-catch语句,为读者“重载”它们的内部结构。当使用DB时,您应该包括诸如SQLExceptions、ConnectionExceptions之类的内容,也许更多。有没有办法把所有例外的责任放在某个对象上 我是这样想的:Java 如何避免方法中的try-catch语句?,java,try-catch,Java,Try Catch,就我个人而言(这并不意味着我是对的或是别的什么),在方法中包含try-catch语句,为读者“重载”它们的内部结构。当使用DB时,您应该包括诸如SQLExceptions、ConnectionExceptions之类的内容,也许更多。有没有办法把所有例外的责任放在某个对象上 我是这样想的: enum TaskEnum { doSmth1, doSmth2, doSmth3, doSmth4 } class OuterClass { doWhatever(TaskEnum ta
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 };
}
这样,外部类将负责由其所有内部类方法引发的异常。
当然,如果我认为我的解决方案是好的,我不会问这个问题。这只是一个例子,让你理解这个想法
请分享您的想法。
不能在类级别使用throws
,只能在方法级别使用
你可以做:
public void method() throws IOException {
}
正如你所说,有两种常用的选择。要么处理出现的异常,要么让低级方法自己抛出错误,直到它到达处理所有异常的顶级类。我个人认为应该在抛出异常的地方处理异常,并且应该尽可能具体。我不喜欢第二种选择,因为它让顶级班级承担了太多的责任。不过,这确实是您的偏好,当然,您应该只在方便且有意义的情况下处理异常。异常机制的美妙之处在于不必在发生异常的地方处理它们,而是在一个共同的地方,将许多可能的故障的处理组合在一起。因此,是的,一定要将异常的处理推迟到方便的时候。主要有两种选择:
不幸的是,Java的检查异常使得第一个选项更难实现,因为每个方法都必须声明它可能抛出的所有检查异常。还有一些常见的陷阱:Eclipse和其他工具提供了一个样板try-catch来包围代码,您应该让异常向上传播。当您实现的方法没有声明遇到的已检查异常时,会出现一种特别困难的情况,这迫使您过早地处理它。在这种情况下,必须将选中的异常包装到
RuntimeException
中并重新播放它。这是非常不明显的,会导致许多错误,或者至少是重复的错误日志条目。我仍然不明白您要做什么。只打印堆栈跟踪的catch块是毫无用处的。提供一个任务枚举只是为了打开它的值,这对我来说没有意义。如果您想沿着这条路走下去,请使用Java提供的功能:
enum TaskEnum {
doSmth1() {
public void execute(String... args) {
// blablabla
}
},
doSmth2() {
public void execute(String... args) {
// blablabla
}
};
public abstract void execute(String... args);
};
class OuterClass {
public void doWhatever(TaskEnum task, String... args) {
try {
task.execute(args);
} catch (Exception e) {
e.printStackTrace();
// and do something useful!
}
}
}
但最好是根本不捕获异常,或者在需要时将它们包装到另一个异常类中(即,当一个超类对抛出的异常施加限制时)