在Java中实现AutoCloseable重要吗?

如果我创建一个实现AutoCloseable的类扩展了另一个不实现它的类,这是否有意义?

例如

public class IGetClosed extends ICannotBeClosed implements AutoCloseable {...}

最佳答案

在Java中实现autoCloseable重要吗?


很难说实现该接口是否重要。但这不是必需的。


  如果我创建一个实现AutoCloseable的类是否有意义
  扩展了另一个没有实现的类?


可以这样做。没有什么不对。

AutoCloseable是Java 7的新增功能。它旨在与新的try-with-resources语句一起使用(Java 7+)

请参见下面两个提供相同功能的类。一个不使用AutoCloseable,另一个不使用AutoClosable:

// Not use AutoClosable
public class CloseableImpl {
    public void doSomething() throws Exception { // ... }
    public void close() throws Exception { // ...}

    public static void main(String[] args) {
        CloseableImpl impl = new CloseableImpl();
        try {
            impl.doSomething();

        } catch (Exception e) {
            // ex from doSomething
        } finally {
            try { //  impl.close() must be called explicitly
                impl.close();
            } catch (Exception e) {
            }
        }
    }
}


// Use AutoCloseable
public class AutoCloseableImpl implements AutoCloseable {
    public void doSomething() throws Exception { // ... }
    public void close() throws Exception { // ...}

    public static void main(String[] args) {

        // impl.close() will be called implicitly
        try (AutoCloseableImpl impl = new AutoCloseableImpl()) {
            impl.doSomething();
        } catch (Exception e) {
          // ex from doSomething
        }
    }
}


如你所见。使用AutoClosble将使代码更短,更清晰。

08-27 02:42