2013-10-16 61 views
0

我有下面的代码示例:通常情况下,如果方法抛出大量异常?

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

我不肯定,这是很好的方法 - 罚全中方法签名许多许多例外。

也许你可以告诉我这种情况最好的做法?

+0

您可以随时启动例外。所有异常都从中继承 –

+0

是否知道哪个异常对于调用该方法的代码而言非常重要? – assylias

+0

@CarlosLanderas:虽然这是一个非常糟糕的主意 - 它减少了有效的文档。 –

回答

6

首先,如果一个方法抛出许多异常,这意味着该方法做了太多事情。你应该考虑分配工作来分离方法。其次,如果调用者(调用者处于相同抽象层次)对于知道发生了哪个确切异常并对其采取特定操作很重要,那么抛出单个异常并且不包装它会更有意义。另外@Jon Skeet提出的观点确实也会降低有效文档的可能性。

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

0

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

你可以用你的异常这样的:

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

我想看更多的细节 – gstackoverflow

+0

我认为这是允许的sintaksis,但它本质上是错误的 – gstackoverflow

0

它始终是更好地处理特定的异常,而不是概括它。抛出这么多例外没有错。这会更好地帮助记录事物。