【问题标题】:How to deal with methods throwing checked exceptions in java如何处理在java中抛出检查异常的方法
【发布时间】:2013-10-15 02:04:07
【问题描述】:

我使用的 API 在大多数方法中都会抛出已检查的异常,甚至构造函数也会抛出已检查的异常。

当使用 API 方法时,我想一直用 try catch 来处理它。假设我使用了 10 次某些方法,那么我需要将它包围在 try catch 块中 10 次。

事情是

  • 我不想将它传播到上层。
  • 我想在使用这些方法时摆脱 try catch 块。

处理这种情况的正确方法是什么?

有人告诉我可调用接口。在这种情况下我们如何使用它?

【问题讨论】:

  • 如果您无法修改 API,那么听起来您需要为要使用的每个 API 方法编写一个包装器方法。然后包装器可以执行异常处理,并且您通常会直接引用 API 的每个地方都将引用您的包装器方法。
  • 但如果有 50 个方法,那么在这种情况下我需要编写 50 个包装器方法。有没有更好的办法。有人告诉我可调用接口。在这种情况下我们如何使用它?
  • 它是像 JDBC 这样的知名 API 吗?可能已经有一个包装器(如 Spring 的 JDBCTemplate)
  • 我听说过使用可调用接口来解决此类问题,因此抱歉无法发表评论。我同意如果有 50 多种方法,这可能会很耗时,但如果做得正确,那就是一次性的工作。我的建议是与使用相同 API 的其他用户交谈,了解他们如何解决相同的问题(如果有的话)。

标签: java exception exception-handling callable


【解决方案1】:

如果您确定不需要单独检查和处理这些异常,您可以编写包装器来处理异常并相应地委派您的方法调用。

【讨论】:

    【解决方案2】:

    您可以编写作为 API 自身类的瘦包装器的类。

    但这通常没有意义。您不希望自己的代码在出现异常时表现不同吗?通常重要的信息会告诉您,您要求发生的事情不会发生。

    【讨论】:

    • 可以使用:Thread.setDefaultUncaughtExceptionHandler(new DefaultExceptionHandler(...));
    • @Daniel,是的,我确实想要。但是大量的 try-catch 块使代码变得混乱。
    • @user1106018 - 这不会阻止编译器告诉您捕获已检查异常或将其重新声明为由您自己的方法抛出。
    【解决方案3】:

    如果您在自己的方法之一中使用这些方法,您可以用一个仅捕获指定的已检查异常的 try-catch 块包围您的方法主体。

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      你可以使用:

      Thread.setDefaultUncaughtExceptionHandler(new DefaultExceptionHandler(...));
      

      但这是非常不建议的:)

      【讨论】:

      • 不,我不想这样做。我确实想捕获异常,但不是一直。
      • 你可以在里面定义你想要捕获的异常,假设你只会捕获 NullPointerException
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      相关资源
      最近更新 更多