问题标签 [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.

0 投票
4 回答
31584 浏览

java - 幂等方法是什么意思,调用java.lang.AutoCloseable的close方法有什么副作用?

java.lang.AutoCloseable 的 close() 方法的 Java 文档说

请注意,与Closeableclose()的方法不同,此方法不需要是幂等的。换句话说,多次调用此 close 方法可能会产生一些可见的副作用, 这与多次调用必须没有效果不同。但是,强烈建议此接口的实现者使他们的 close 方法具有幂等性。close()Closeable#close()


幂等方法 是什么意思,close()两次调用此方法的副作用是什么?

既然接口Closeable扩展AutoCloseable了,为什么在接口关闭时看不到副作用Closeable

0 投票
3 回答
1867 浏览

java - 为什么我们必须在 try-with-resource 块中声明和定义资源?

以上工作正常。但是当我这样做时

它抛出错误。为什么会这样?我正在测试这个新功能,我认为我会采用第二种方法,然后try-catch statement打印资源PrintWriter f- 如果 try-with-resource 语句按预期工作,它应该为空。为什么不允许第二种方式?

另外我如何通过方法1对其进行测试?

0 投票
1 回答
183 浏览

jdbc - pre JAVA 7 JDBC API 是否与 JAVA 7 一起使用资源?

只是将应用程序转换为 JAVA 7 并想知道是否有人在尝试使用资源和 c3p0 连接池时遇到问题。

我猜现在JAVA会自动关闭数据库,准备好的语句和语句,如果你使用try with resources的话。

是不是说JDBC驱动、c3p0等底层API必须实现AutoClosable?

我正在使用 c3p0 0.9.2.1 和 jtds 1.3.0

0 投票
2 回答
824 浏览

java - 如何防止 try-with-resources 从 lines() 关闭 BufferedReader (Stream)?

这就是我正在做的事情,以防止 a在 a 中完成BufferedReader时被关闭:lines()try-with-resources

这是一个通用实用程序,它可以在很多阅读器上运行,而不仅仅是文件..

有没有更好的控制方法,以便关闭Stream<String>不关闭Bufferedreader

根据下面的评论尝试一个 normal try,它看起来像这样:

这似乎更好:)

0 投票
2 回答
925 浏览

java - 为什么获取`Stream时BufferedReader没有关闭` 在 try-with-resources 中?

Stream在 try-with-resources 中使用 a时,应关闭阅读器。

鉴于这种:

...阅读器没有被关闭??

此测试失败:

0 投票
1 回答
1257 浏览

exception-handling - 如何处理 let 绑定或正文中发生的异常

如何let使用相同的 finally 块处理语句的绑定或正文中可能发生的异常?前任:

如果失败(create-connections)(dostuff)我想(close connections)。一些选项:

选项1:

这显然不起作用,因为connections它不在 finally 块的范围内。

选项 2:

此选项仅捕获在(destuff)调用中发生的异常,而不是在(create-connections).

选项 3:

这也不起作用,因为connections它不在 let 绑定中的 finally 语句的范围内。

那么处理这个问题的最佳方法是什么?

0 投票
2 回答
2089 浏览

java - 我的 AutoCloseable.close() 实现可以检测到潜在的异常吗?

在使用 Java 7 try-with-resources 语句实现 anAutoCloseable时,我想知道 try 块中是否存在异常。例如:

为了说明这一点:

现在,从了解try-with-resources 语句如何转换为 bytecode,我想这是不可能的。但是是否有任何(可靠的!)技巧通过检测/反射/一些未记录的编译器功能允许我RuntimeException从内部访问上述内容AutoCloseable.close()

注意:我是 API 设计人员,我无法控制 API 使用者的 try-with-resources 代码。因此必须在AutoCloseable现场进行实施

0 投票
3 回答
1516 浏览

java - 如果实现 AutoCloseable,帮助调用 close()?

JDK 或通用库中是否有任何辅助方法可以执行此操作:

close()如果适用,只需一条线即可调用对象。

我知道try-with-resources,这不适用于这种情况。而且我知道并非所有具有close()方法的类都实现AutoCloseable. 但是,我似乎一遍又一遍地写上面的内容..

0 投票
1 回答
1475 浏览

java - 工厂创建的实例的自动关闭“资源泄漏”警告?

我在 Eclipse for AutoCloseables 中收到的这些“资源泄漏”警告似乎是救命稻草。

但是,如何让它们为工厂创建的实例工作?

例如(a有效,但b无效):

有没有我可以坚持的注释newResource()或者我可以做些什么来让编译器(或者它是 Eclipse?)知道所有权的变化?

0 投票
1 回答
7718 浏览

java - Eclipse 不一致:资源泄漏:'' 永远不会关闭

如果我有以下代码:

Eclipse 将黄色波浪线置于下方new FileOutputStream("test.txt"),并向我显示以下警告:

Resource leak: '<unassigned Closeable value>' is never closed

奇怪的是,如果我去掉三元运算:

警告消失。

这是 Eclipse 中的不一致(错误?)还是我错过了这两种场景之间的一些根本区别?

一般来说,Eclipse 似乎足够聪明,可以理解当我Closeable从方法返回 a 时,可以不让方法关闭流(毕竟,返回关闭的流有什么意义?)。当我间接返回结果时,它甚至可以正确执行此操作:

(这里没有警告)

那么,Eclipse 只是被三元运算搞糊涂了吗?如果是这样,我应该将此报告为错误吗?


另一个奇怪的事情:

如果我替换FileOutputStreamByteArrayOutputStream,警告也会消失:

为什么它以不同的方式处理这两个流?两者都是直接继承OutputStream并实现完全相同的接口 ( Closeable, Flushable, AutoCloseable)。它是否以某种方式知道这ByteArrayOutputStream.close()是一个空操作?如果是这样,是硬编码到 Eclipse 中还是它实际上解析源代码或字节码来解决这个问题?