Java异常:抛出或发送为返回(函数输出)?

时间:2011-08-26 18:18:58

标签: java exception-handling

以下是用法:我正在编写用于执行特定功能/任务的类和函数(例如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;
}

假设被调用的函数总是返回一个字符串。

对哪种方法更好的评论?我忽略了任何陷阱/问题?

感谢所有帮助!!!

3 个答案:

答案 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。除非你能想出很多其他人可以看到的有效理由(不仅仅是你自己)。