假設我有一個Foo需要一些異步作業的物件,bar()在它準備好使用之前要完成。感覺就像我嘗試的每個解決方案都遇到了反模式。
考慮的解決方案:
保持一個
initialized變數Foo。呼叫bar()Foo 的建構式。當bar()完成設定initialized = true。我對這種方法的問題是它在物件中引入了未初始化和初始化狀態,在我的理解中應該避免這種情況。Foo在父級中設定并通過引數注入資料。我對這種方法的問題是它只會將問題推到更遠的地方;如果這樣做了,現在其他一些類負責 doFoo的初始作業。
在這種情況下,通常的做法是什么?謝謝!
uj5u.com熱心網友回復:
回傳 Future 的靜態工廠方法怎么樣?
class Foo {
private static final ExecutorService executor =
Executors.newSingleThreadExecutor();
public static Future<Foo> construct() {
return executor.submit(() -> {
bar();
return new Foo();
});
}
private Foo() {}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/396748.html
