你如何处理对象的异步初始化?

How do you handle async initialization of an object?

假设我有一个对象 Foo,它需要一些异步工作,bar(),才能在它准备好使用之前完成。感觉就像我尝试的每个解决方案,我 运行 变成了反模式。

考虑的解决方案:

在这种情况下,通常的做法是什么?谢谢!

returns Future 的静态工厂方法怎么样?

class Foo {
    private static final ExecutorService executor =
            Executors.newSingleThreadExecutor();
    
    public static Future<Foo> construct() {
        return executor.submit(() -> {
            bar();
            return new Foo();
        });
    }

    private Foo() {}
}