当前位置: 首页 > 面试题库 >

AutoCloseable的close方法引发异常是否有意义?应该如何处理?

夹谷志
2023-03-14
问题内容

在C#中,以的方法引发异常被认为是不好的做法。Dispose``IDisposable

相比之下,在java中,的close方法AutoCloseable允许抛出任何Exception并强制调用者以某种方式处理它。但是,如果发生这种情况,呼叫者应该合理地期望做什么?这表明关闭资源的尝试以某种方式失败了。那么用户是否必须在继续操作之前再次尝试关闭资源,也许需要某种指数补偿?


问题答案:

看起来每个涉及资源的操作(包括隐式close()调用)都被视为try {}块的一部分。甚至从技术/语法上考虑,这些资源都在{}括号之外提到。

这意味着,如果在close()期间抛出IOException,它将被与try关联的catch()子句捕获(或者向上传播)。

关于可能需要引发异常的 原因 :close()可能导致flush(),flush()可能导致write(),而write()可能失败。



 类似资料:
  • 我正试图自己解决参数问题。 我可以很容易地从NativeWebRequest获取输入参数,并将它们分派到相应的自定义@Param注释参数中。 问题是我还想在这方面做一些语法检查/验证。但如果我在“resolveArgument”中抛出异常,则会向用户显示完整的堆栈跟踪。这将是过度和不安全的。我只想向用户返回一条JSON格式的消息,以显示哪个输入参数语法有错误。

  • 在一篇文章(这里是链接:https://www.javatpoint.com/exception-handling-with-method-overriding)中,他们说:“如果超类方法不声明异常,子类覆盖的方法不能声明检查的异常,但它可以声明未检查的异常。” 为什么Java这样工作?因为重写的方法可以比超类的方法具有更多的特性,所以它可以抛出一些超类方法不会抛出的异常。

  • 我有一个rest服务,它将抛出一个异常,我想知道什么将是最好的方式来处理这一点。 我想知道这是rest服务中处理异常的正确方式吗? 我在用泽西。

  • 我对从JBPM工作项处理程序抛出异常并在业务流程的其他地方处理异常的主题有点困惑。我们使用JBPM 6.0.3在Jboss EAP 6.1中运行。 JBPM用户指南暗示您永远不应该从WorkItemHandler中抛出异常。相反,处理程序应该捕获它们并以某种方式处理它们,或者将它们转换为错误消息、信号或类似信息。JBPM甚至提供了工作项处理程序包装器,用于捕获信号并将它们转换为消息。用户指南中没有

  • 我想处理验证器引发的异常。 我用ControllerAdvice注释创建了异常处理程序。它处理其他异常,但不处理MethodArgumentNotValidException。 异常处理程序 已验证的类(没有getter/setter等) Rest api控制器 Api异常(没有getter/setter等) 目前,我从验证器获得了一个空响应,带有错误的\u请求http状态,而其他异常得到了正确处

  • 我有两个模块,一个从rest模板调用另一个。(管理员调用notifServer)notifServer有一个用Async注释的方法。我想在该方法中抛出一个异常,但管理员获取响应太快,并且无法在admin中捕获异常方法。 我是spring和@Async进程的新成员。我已经尝试将响应主体从NotifServer映射到C的CompletableFuture。类 。但我仍然没有得到错误响应。 此代码来自管