如何为构建时打开的资源实现Autocloseable

时间:2018-03-26 14:31:20

标签: java autocloseable

我在构建对象时打开了一个资源。我用它来写对象的整个生命周期。但我的应用程序可以在没有警告的情况下关闭,我需要捕获它。这堂课非常简单。

public class SomeWriter {
    private Metrics metrics;

    public SomeWriter() {
        try (metrics = new Metrics()) { // I know I can't but the idea is there
        }
    }

    public void write(String blah) {
       metrics.write(blah);
    }

    public void close() {
       metrics.close();
    }

所以,你明白了。我想" Autoclose"应用程序出现故障时的度量标准。

1 个答案:

答案 0 :(得分:2)

使用try-with-resource概念是不可能的,这只适用于本地范围。您Metrics中关闭close()的方式是您可以做的最佳方式。

最好的办法是让SomeWriter同时实现AutoCloseable并在try-with-resources块中使用编写器本身,如

try (SomeWriter writer = new SomeWriter()) {
}
// here, the Metrics will also have been closed.