0

我有以下代码示例:

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

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

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

4

4 回答 4

6

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

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

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

于 2013-10-16T07:46:37.337 回答
0

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

您可以像这样包装您的异常:

try{ 
   //do something 
} catch(Exception e){ 
   throw new WrapperException(e);
}
于 2013-10-16T07:39:55.717 回答
0

处理特定的异常总是比泛化它更好。抛出这么多异常并没有错。这也将更好地帮助记录事情。

于 2013-10-16T07:45:03.470 回答
0

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

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

于 2013-10-16T07:47:52.983 回答