我有以下代码示例:
private boolean openThroughCommPort(IProgressMonitor monitor, int portNum)
throws InterruptedException, PortInUseException, IOException,
UnsupportedCommOperationException, TooManyListenersException,
UnsupportedVehicleException, InnerCanceledException {
...
}
我不确定它是好方法 - 在方法签名中抛出许多异常。
也许你可以告诉我这个案子的最佳实践?
答案 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上添加简短描述。