【发布时间】:2013-06-30 02:34:12
【问题描述】:
我有一个实现 AutoCloseable 的类,旨在与 Java 7 的新 try-with-resources 构造一起使用。但是,我想不出一种方法来保证我的班级的用户使用 try-with-resources。如果这不发生,那么我的班级将无法自行关闭,并且会发生不好的事情。有什么方法——语言结构或其他方式——来强制执行吗?甚至能够检测我是否在 try-with-resources 块中,这样如果不是的话我可以抛出异常(尽管编译时构造会更好)。
谢谢!
【问题讨论】:
-
用户想要手动管理
closeing 您的课程,而不是使用 try-with-resources 自动管理?创建一个名为close的finalize方法可以解决您的问题吗? -
不幸的是,
finalize不能保证被调用。 GC 可能决定不调用它。 -
其实我猜想
finalize的不可靠可能是引入try-with-resources的原因。 -
总比没有好,并且不能保证您的用户必须在您的课程上调用
close,然后才能获得GCed。 -
这就是重点——我正试图弄清楚如何实现这样的保证。如果我可以强迫他们使用 try-with-resources,那么我就能得到保证。
标签: java try-with-resources enforcement