首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用资源和“`AutoCloseable`”接口的Java尝试

使用资源和“`AutoCloseable`”接口的Java尝试
EN

Stack Overflow用户
提问于 2022-06-16 12:57:21
回答 1查看 225关注 0票数 2

我正在寻找与python的with语句相当的AutoCloseable,并且我读到了有关实现AutoCloseable接口和使用try与资源的相关内容。

在python中,上下文管理器(with语句)使用两种方法:__enter____exit__,但在Java中,try资源块只使用close,这相当于__exit__

是否有等效的__enter__方法,以便在输入try with资源块时自动执行某个方法,而不仅仅是当块结束时?

EN

回答 1

Stack Overflow用户

发布于 2022-06-16 13:20:38

等效的内容基本上是您在try中调用以获取AutoCloseable实例的任何内容。这可能是一个构造函数,例如:

代码语言:javascript
复制
try (MyClass obj = new MyClass()) { …

其中,具有这样一个构造函数的类如下所示:

代码语言:javascript
复制
public class MyClass implements AutoCloseable {
    public MyClass() {
        // do "enter" things...
    }

    @Override
    public void close() {
        // close resources
    }
}

根据您需要"enter“来做的事情,您可能更喜欢为您的类创建一个静态生成器,如下所示:

代码语言:javascript
复制
try (MyClass obj = MyClass.getInstance(someProperties)) { …

那么你的班级可能会是这样的:

代码语言:javascript
复制
public class MyClass implements AutoCloseable {
    private MyClass() {
        // instantiate members
    }

    public static MyClass getInstance(Properties config) {
        // you could implement a singleton pattern or something instead, for example
        MyClass obj = new MyClass();
        // read properties...
        // do "enter" things...
        return obj;
    }

    @Override
    public void close() {
        // close resources
    }
}

您甚至可以在try中调用工厂或构建器模式来生成AutoCloseable。这完全取决于您的设计以及您需要实例在“输入”上做什么。

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

https://stackoverflow.com/questions/72646247

复制
相关文章

相似问题

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