问题标签 [autocloseable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在 try-with-resources 块中调用对象的方法
Java 教程声明您可以使用以下方法执行以下操作try-with-resources
:
在本教程中,ResultSet
永远不会关闭,因此我想包含ResultSet
,因为它也实现了AutoCloseable
接口,如下所示:
这很好用,但是当涉及到PreparedStatements
我希望能够在执行查询之前设置一些值时:
这会导致一系列编译错误,因为(我假设)只允许变量赋值。
try-with-resources
有没有办法在同一个街区巧妙地做到这一点?
我已经想到了:
- 嵌套的 try-with-resources (这是我试图避免的)。我意识到这样做并没有什么“错误”,我只是为了可读性而这样做。
考虑以下情况:
对比
- 让
setString()
方法返回对象并将其包含在赋值中 - 创建某种帮助方法来创建连接并相应地设置参数。
就像是:
java - 在 try 块外引用 AutoCloseable 实例
为了方便起见,我想使用AutoCloseable
接口对对象做一些事情,这些事情应该在进一步使用之前完成。
唯一的问题是try-with-resources
块本身就是事物,我的意思是一般来说,为了获得对我的AutoCloseable
实例的引用,我必须做这样的事情:
这里是这个结构:
看起来有些凌乱。所以我的问题更多是关于设计问题。我怀疑java架构师没有设想这样使用try-w-r
块的原因是什么:
那么我可能不应该像上面描述的那样使用它吗?如果这样做是个好习惯?
编辑我被要求解释为什么我的问题与为什么 Java 的 try-with-resource 中需要声明不同
解释很简单:我不是在问为什么?,但是:如果这样做是个好习惯?
java - 自动关闭类不调用默认关闭方法
我有这段代码:
主要课程:
我想知道为什么我得到这个输出:
代替:
java - 当 AutoCloseable 为空时尝试使用资源
try-with 功能如何对AutoCloseable
已声明的变量起作用null
?
我认为当它尝试调用close
变量时这会导致空指针异常,但它运行没有问题:
java-8 - 在 try-with-resources 块之外流式传输 JOOQ 结果时,我是否会冒 JDBC 连接泄漏的风险?
我有一个 JOOQ 查询,我想避免同时实现所有记录。(但是,我可以共同实现从它们创建的所有 bean 对象。)
我有以下简单的方法来加载数据:
这会在任何情况下导致 JDBC 连接泄漏吗?(例如 中的异常CustomerInfo::new
)
java - Java程序终止时关闭文件失败有什么危害吗?
当我的程序启动时,它会打开一个文件并定期写入。(它不是日志文件;它是程序的输出之一。)我需要在程序的长度内使用该文件,但我不需要做任何特别的事情来结束文件;关闭它。
我为 Java 中的文件 I/O 收集了它,我应该实现AutoCloseable
它并将其包装在一个 try-with-resources 块中。然而,因为这个文件是长期存在的,并且它是程序的少数输出之一,我发现很难组织我打开的所有文件都包含在 try-with-resources 块中的东西。此外,顶级类(我的main()
函数所在的地方)不知道这个文件。
这是我的代码;注意缺乏writer.close()
:
tl;博士如果资源是打开的输出文件,我是否需要实现AutoCloseable
和调用writer.close()
,并且在程序完成之前我不需要关闭它?我可以假设 JVM 和操作系统(Linux)会自动为我清理东西吗?
奖励(?):我在 C# 中IDisposeable
也遇到了这个问题。这个using
块,就像 Java 的 try-with-resources 构造一样,是一个很好的特性,当我有一些我要打开的东西,快速做一些事情,然后马上关闭。但通常情况并非如此,特别是对于文件,当对该资源的访问暂停一段时间,或者当需要管理多个此类资源时。如果我的问题的答案是“始终使用 try-with-resources 块”,我又被卡住了。
java - 从 try-resource 结构返回 Future
我有以下方法,它使用 Apache Commons Http 客户端向给定的 URI 发送异步 GET 并返回 Future 和响应。
CloseableHttpAsyncClient 实现 Closeable 因此我使用 try/resource 结构。
下面你可能会看到用法:
问题是,当我在未来调用 get 时,它不会返回所需的 HttpResponse。如果我使用重载的 get() 方法,它会一直等到超时或永远。我想这是因为 try/resource 没有正确释放。
如何改进给定的方法/代码以便能够正确使用:Future with try/resource structure包含在方法主体中?
更新:
这是maven依赖:
kotlin - 我自己对 Kotlin 的 try-with-resources 缺席的解决方案
Kotlinuse
为对象提供了函数Closeable
,但似乎他们忘记了AutoCloseable
(例如,DB 准备好的语句)与 try-with-resources 的完整 Java 等效项。
我已经实施了下一个“自制”解决方案:
然后你可以通过下一个方式使用它:
我是 Kotlin 的新手,我想知道我自己的解决方案中是否遗漏了一些重要的东西,这些东西可能会给我在生产环境中带来问题/泄漏。
java - 关闭资源的最佳做法是什么?
我有一个 java 类,它分配了必须关闭的资源。我真的不知道如何执行这一点,我目前的方法是实现接口AutoCloseable
,希望调用者close()
有时调用并添加一个boolean
在每个方法开始时检查的关闭,如果true
,方法 throws IllegalStateException
。
调用者必须调用close()
并且我必须在每个方法开始时检查关闭都不是很好,是否有一些最佳实践来避免这种情况?
java - 如何强制释放资源?
我有一个名为 Parameter 的类,它包含不同的值,包括java.sql.Clob
使用 JDBC4 规范,我们free()
可以调用一个方法来释放分配给Clob
对象的资源。我正在考虑在里面制作Parameter
类AutoClosable
和调用free()
方法close()
这很好,但我也想要强制执行或至少暗示其他人Parameter
是AutoClosable
除了文档之外,还有其他方法可以实现这一点吗?基本上我正在寻找在这种情况下可以做的额外事情。