我有一个看起来像这样的代码(抱歉使用 Java 括号样式):
class SomeClass {
public static void doSomethingRisky() {
try {
SomeRiskyFunction();
} catch (Exception e) {
throw e;
}
}
}
class MainClass {
public void callSomethingRisky() {
try {
SomeClass.doSomethingRisky();
} catch (Exception e) {
FinallyHandleTheException(e);
}
}
}
基本上,SomeClass
将是一个库,我想将其设计为所有异常都将由调用程序处理(调用程序可能会也可能不会选择显示有关异常的消息)。
我的问题是关于 SomeClass
的 doSomethingRisky()
中 try/catch&throw
的使用。是多余的还是有必要的?我的意思是,如果我将其关闭并且该函数在运行时确实遇到异常,它是否会导致程序崩溃,因为该函数内部没有任何内容捕获异常,或者它是否仍将其传递给调用者(callSomethingRisky()
) 它在哪里被优雅地处理?
Java 的相同问题。谢谢!
最佳答案
doSomethingRisky
中带有 throw e;
的 try
/catch
只做一件事:它破坏堆栈-跟踪信息。 可能 不是您想要的,因此应该删除 try
/catch
- 它已经冒泡了-符合预期。
关于信息,如果它只是throw;
(而不是throw e;
)那么它只是多余的,而不是破坏性的。
关于C# throw 语句多余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17235159/