Java 如果方法抛出大量异常,这通常是正常的?

Java 如果方法抛出大量异常,这通常是正常的?,java,exception,Java,Exception,我有以下代码示例: private boolean openThroughCommPort(IProgressMonitor monitor, int portNum) throws InterruptedException, PortInUseException, IOException, UnsupportedCommOperationException, TooManyListenersException, UnsupportedVehicleE

我有以下代码示例:

 private boolean openThroughCommPort(IProgressMonitor monitor, int portNum)
       throws InterruptedException, PortInUseException, IOException,
       UnsupportedCommOperationException, TooManyListenersException,
       UnsupportedVehicleException, InnerCanceledException {
        ...
       }
我不确定这是一个好方法——在方法签名中抛出许多异常


也许您可以告诉我这种情况下的最佳实践?

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

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

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

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

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

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

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

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

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

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


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

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

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


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

不要包装或吞下
InterruptedException
,否则,您的应用程序将在线程上下文中表现不正确。只需几个链接供参考,请确保以适当的方式处理:


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

不要包装或吞咽
中断异常
,否则您的应用程序将在线程上下文中表现不正确。只需几个链接供参考,请确保以适当的方式处理:


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

您可以随时启动Exception。所有异常都是从ITS继承的,知道抛出了哪个异常对调用该方法的代码很重要吗?@CarlosLanderas:这是一个非常糟糕的主意-它减少了有效的文档。同意这是一个糟糕的主意。这取决于代码需要如何处理,以及捕获该范围内的异常有多重要。但问题似乎是,我不喜欢这么多的台词,这么难看:)即使有很多例外,也没有那么令人不安。异常的抽象级别似乎与方法的抽象级别一致。您可以随时启动异常。所有异常都是从ITS继承的,知道抛出了哪个异常对调用该方法的代码很重要吗?@CarlosLanderas:这是一个非常糟糕的主意-它减少了有效的文档。同意这是一个糟糕的主意。这取决于代码需要如何处理,以及捕获该范围内的异常有多重要。但问题似乎是,我不喜欢这么多的台词,这么难看:)即使有很多例外,也没有那么令人不安。异常的抽象级别似乎与方法的抽象级别一致。我想看到更多细节我认为sintaksis允许但本质上是错误的我想看到更多细节我认为sintaksis允许但本质上是错误的在任何世界上,这是如何提供答案的对于这个问题??在任何一个世界上,这是如何为这个问题提供答案的??