我正在寻找与python的with语句相当的AutoCloseable,并且我读到了有关实现AutoCloseable接口和使用try与资源的相关内容。
在python中,上下文管理器(with语句)使用两种方法:__enter__和__exit__,但在Java中,try资源块只使用close,这相当于__exit__。
是否有等效的__enter__方法,以便在输入try with资源块时自动执行某个方法,而不仅仅是当块结束时?
发布于 2022-06-16 13:20:38
等效的内容基本上是您在try中调用以获取AutoCloseable实例的任何内容。这可能是一个构造函数,例如:
try (MyClass obj = new MyClass()) { …其中,具有这样一个构造函数的类如下所示:
public class MyClass implements AutoCloseable {
public MyClass() {
// do "enter" things...
}
@Override
public void close() {
// close resources
}
}根据您需要"enter“来做的事情,您可能更喜欢为您的类创建一个静态生成器,如下所示:
try (MyClass obj = MyClass.getInstance(someProperties)) { …那么你的班级可能会是这样的:
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。这完全取决于您的设计以及您需要实例在“输入”上做什么。
https://stackoverflow.com/questions/72646247
复制相似问题