首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中添加AutoCloseable重要吗?

在java中添加AutoCloseable重要吗?
EN

Stack Overflow用户
提问于 2016-06-29 18:58:50
回答 4查看 5.2K关注 0票数 2

在java中实现AutoCloseable很重要吗?

如果我创建一个实现AutoCloseable的类,扩展另一个没有实现它的类,这有意义吗?

e.g

代码语言:javascript
复制
public class IGetClosed extends ICannotBeClosed implements AutoCloseable {...}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-06-29 19:10:30

在java中实现autoCloseable很重要吗?

很难说它是重要的还是不重要的实现接口。但这并不是必需的。

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

这样做没问题。没什么不对的。

AutoCloseable是从Java 7中添加的。它被设计为与新的尝试资源语句(Java 7+)一起使用。

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

代码语言:javascript
复制
// 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 or close
        }
    }
}

如你所见。使用AutoClosble将使代码更简洁、更简洁。

票数 3
EN

Stack Overflow用户

发布于 2016-06-29 19:02:45

AutoCloseable是一个接口,在使用它时可以自动关闭对象的资源。如果您没有计划使用您的对象与资源的尝试,就根本没有必要实现它。

作为继承的一条规则,不,做你想做的事情并没有本质上的错误。如果您想要自动关闭您的子类中的资源,请继续。

票数 1
EN

Stack Overflow用户

发布于 2016-06-29 19:04:04

让一个类实现AutoClosable是没有问题的,即使它是超类,实际上,由于Java中的所有类都直接或间接地扩展了java.lang.Object,所以所有的AutoClosable最终都扩展了一个不实现这个接口的类。

如果您的类有一些close的语义,那么您可能应该让它实现AutoClosable。这样做几乎不需要花费任何费用,如果有的话,它允许您使用Java 7简洁的语法和资源的尝试语法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38108010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档