【问题标题】:Handle Multiple Throwable In A Catch Block In JAVA [closed]在 JAVA 的 Catch 块中处理多个 Throwable [关闭]
【发布时间】:2019-10-18 04:11:19
【问题描述】:

我从子方法和嵌套方法中抛出了多个错误。不同类型的异常来自它们。 例如:“NullPointer 异常,连接异常,IllegalState 异常”。我可以在一个 catch 块中使用多个 catch 块或多个 if 语句来捕获它们。

我想写一些干净的代码。我不想使用重复的东西。有没有其他方式或方法来实现这个。

【问题讨论】:

  • 请发布您编写的代码,然后我们可以提出更改建议。
  • 如果你不想在各种catch块中重复代码,那么你可以catch Throwable,它被扩展为Error和Exception。但这假设你真的,真的想对所有类型的问题做同样的事情。

标签: java performance optimization coding-efficiency


【解决方案1】:

您所描述的是将多个 catch 块折叠在一起。至少从 Java 8 开始,这就是可能的。

这是一个捕获三种不同异常类型并以相同方式处理它们的示例:

try {
    // do things here
} catch (IllegalAccessException | IllegalStateException | ConnectException e) {
    // handle exceptions here
}

您也可以有多个折叠的catch 块。这是一个例子:

try {
    // do things here
} catch (IllegalAccessException | IllegalStateException | ConnectException e) {
    // handle exceptions here
} catch (IllegalArgumentException | IllegalMonitorStateException e) {
    // handle these exceptions differently from the first set
}

【讨论】:

  • 我想用不同的消息警告用户不同的异常。例如;对于连接异常“连接失败”对于 NullPointer 异常“不能为空”
  • @YusufErdoğan 不应该抛出NullPointerException,因为它们都是错误。您写道您无法解决所有问题,但您的用户也不会这样做。对于错误,我会告诉他们“糟糕,出了点问题”。并将报告发送给我自己,以便我修复它。
【解决方案2】:

我认为异常分为两类:一类是您需要修复的,一类是您的用户需要修复的。

因此,如果您遇到 NullPointerException,您应该解决这个问题。

同样,在 ConnectException 的情况下,这可能需要向用户报告。这不是编程问题,而是网络问题。

【讨论】:

  • 我也这么认为。但是在做大项目。我们无法解决所有问题,也无法正确警告用户
猜你喜欢
  • 1970-01-01
  • 2015-02-16
  • 2017-03-25
  • 1970-01-01
  • 2012-12-31
  • 2020-04-02
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多