通常,如果方法抛出大量异常?

时间:2013-10-16 07:35:50

标签: java exception

我有以下代码示例:

 private boolean openThroughCommPort(IProgressMonitor monitor, int portNum)
       throws InterruptedException, PortInUseException, IOException,
       UnsupportedCommOperationException, TooManyListenersException,
       UnsupportedVehicleException, InnerCanceledException {
        ...
       }

我不确定它是好方法 - 在方法签名中抛出许多异常。

也许你可以告诉我这个案子的最佳实践?

4 个答案:

答案 0 :(得分:6)

首先,如果一个方法抛出许多异常,则意味着该方法做了太多事情。你应该考虑将工作分配给不同的方法。

其次,如果调用者(调用者处于相同的抽象级别)对于知道发生了哪个确切的异常并对其采取特定操作很重要,则抛出单个异常而不是包装它更有意义。 @Jon Skeet提出的观点也证明了它也会降低有效文档的可能性。

如果调用者不需要知道确切原因,那么如果抽象级别不同,那么将异常包装在您自己的自定义异常中是有意义的,该异常与调用者的抽象级别一致。

答案 1 :(得分:0)

我建议您创建自己的包装器Exception并在方法中使用try / catch。 Narendra Pathai是完全正确的,如果调用者不需要根据最初抛出的异常来决定继续进行,那么你应该这样做。

你可以像这样包装你的例外:

try{ 
   //do something 
} catch(Exception e){ 
   throw new WrapperException(e);
}

答案 2 :(得分:0)

处理特定异常而不是概括它总是更好。抛出这么多例外并没有错。这也可以更好地帮助记录事物。

答案 3 :(得分:0)

不要包装或吞下InterruptedException,否则您的应用程序在线程上下文中的行为会不正确。只需要几个链接供参考,一定要以正确的方式处理:
http://www.ibm.com/developerworks/java/library/j-jtp05236/
Java Thread Sleep and Interrupted Exception

调用方法应该处理异常或让它们流动起来。您可以在方法的Javadoc上添加简短描述。