以下是用法:我正在编写用于执行特定功能/任务的类和函数(例如createBuilding,destroyBuilding等)。我所遵循的设计是该函数不处理/处理任何错误场景。如果出现错误/异常,调用者有责任采取适当的措施。我可以通过两种方式做到这一点:
public void caller {
try {
A.createBuilding();
catch (Exception e) {
process exception
}
}
第一种方法:
public class A {
public String createBuilding throws Exception {
try {
blah blah blah
catch (Exception e) {
throw new Exception(e);
}
}
第二种方法:
public class A {
public String createBuilding {
StringBuffer sb = new StringBuffer();
try {
blah blah blah
catch (Exception e) {
sb.add(e.toString());
}
return sb.toString();
}
The user in the second case does the following:
public void caller throws Exception {
String st = A.createBuilding();
if (st.contains("Exception"))
do something;
}
假设被调用的函数总是返回一个字符串。
对哪种方法更好的评论?我忽略了任何陷阱/问题?
感谢所有帮助!!!
答案 0 :(得分:8)
使用第一个课程,即使用例外。
第二个打破了多年的错误处理研究,不要这样做。
<强>原因强>: 如果您使用Exceptions,您将能够在围绕Thread.uncaughtExceptionHandler和stack-traces等异常的java构建中利用整个错误处理框架。另外,使用excpetion是错误处理的首选方法,建议将返回自定义字符串识别错误
答案 1 :(得分:1)
返回一个字符串会删除信息(比如stacktrace。)如果你的方法没有处理异常,它就不应该捕获它并让调用者处理它:
public void createBuilding() throws Exception {
blahBlahBlah();
}
答案 2 :(得分:0)
使用Exceptions的唯一缺点是它们稍微慢一点,否则它们只提供优势(堆栈跟踪,使用专用处理程序的可能性,易于使用的状态,内置等)。如果性能影响阻碍你使用它们,你可能应该切换到ASM或C,如果你这样做,不要忘记返回0表示成功以及其他任何失败,以便你有足够的代码可以使用它们错误;)
没有,请继续使用Exceptions。除非你能想出很多其他人可以看到的有效理由(不仅仅是你自己)。