强制尝试使用资源Java 7

jos*_*hlf 6 java enforcement try-with-resources

我有一个实现AutoCloseable的类,旨在与Java 7的新try-with-resources构造一起使用.但是,我无法找到一种方法来保证我的类的用户使用try-with-resources.如果没有发生这种情况,那么我的班级将无法自行关闭,并且会发生不好的事情.有没有办法 - 语言构造或其他 - 来强制执行此操作?甚至能够检测我是否在try-with-resources块中,以便我可以抛出异常(如果不是)会很好(尽管编译时构造会更好).

谢谢!

Jon*_*oni 4

不幸的是,没有办法保护自己免受用户愚蠢行为的影响。

您可以实现finalize要调用的方法close;这样,您可以确保至少在对象被垃圾收集时关闭资源,即使您不知道何时(或是否)发生这种情况。

如果您可以对项目的使用方式进行限制,那么您也许可以使用面向方面的编程来强制实施一些策略,但这样您就不再真正使用 Java 了。

  • @DavidHofmann:我认为你误解了一些东西。可能(并且有理由)不鼓励依赖 GC 调用的 Finalize,但实际上“实现” Finalize 方法在某些情况下是防止资源泄漏的唯一选择。 (2认同)
  • 我同意@jarnbjo,但是我会让我的 api 的客户端快速死亡,并让他们了解 api 的滥用情况,而不是允许他们有不确定的行为。 (2认同)