从带有资源的 try catch 中关闭 Finally 块中的资源

Close a resource in a Finally block from a try catch with resources

我的代码中有下一个:

try (DockerClient client = DefaultDockerClient.fromEnv().connectTimeoutMillis(TimeUnit.SECONDS.toMillis(3)).build()) {
    //some code here
}catch (DockerCertificateException e) {
    log.warn("Failed to connect Docker Client {}", e.getMessage());
}
finally {

}

我需要在最后一个块中关闭客户端,但我不能,因为出现错误(无法解析符号客户端)。

有什么办法可以在最后一个区块关闭这个客户端吗?

try(...) 中的对象必须实现 AutoClosable,并且无论是否发生异常,该对象都会自动关闭。您根本不需要 finally 块。

如果对象未实现 AutoClosable,您可以回退到旧的 try-catch-finally 块,如

DockerClient client = null;
try {
  //some code here
  client = DefaultDockerClient.fromEnv().connectTimeoutMillis(TimeUnit.SECONDS.toMillis(3)).build();
} catch (DockerCertificateException e) {
  log.warn("Failed to connect Docker Client {}", e.getMessage());
} finally {
  if (client != null) client.close();        
}

这称为 Java try-with-resources 块。您可以在此处查看将普通 try-catch-finally 块与 try-with-resources 块进行比较的示例:https://www.baeldung.com/java-try-with-resources#replacing

客户端将被关闭,因为你正在使用try-with-resources(当你在try(resource definition)中打开资源时),它会在try块后自动关闭资源,你不需要写finally块。