Life44:
私はそのようなクラスを持っています:
public class WorkHelper {
private final Worker worker;
public WorkHelper(Worker worker) {
this.worker = worker;
}
//...
}
そして、誰もが以下の初期設定が間違っていることを知っています:
public class Worker {
private final WorkHelper helper;
private final SomeClass some;
public Worker(SomeClass some) {
helper = new WorkHelper(this);
this.some = some;
}
}
しかし、どのように以下の1程度?これは正しいです?
public class Worker {
private final WorkHelper helper = new WorkHelper(this);
private final SomeClass some;
public Worker(SomeClass some) {
this.some = some;
}
}
ボヘミアン:
すべてのバージョンは安全ではありません。彼らは、「すべてのケースであるさせるthis
脱出を」。
例えば、工事が完了した後に労働者のヘルパーを作成するファクトリメソッドを作成することを検討:
public class Worker {
private WorkHelper helper;
private SomeClass some;
// hide the constructor
private Worker() {}
public static Worker create(SomeClass some) {
Worker worker = new Worker();
worker.some = some;
worker.helper = new WorkHelper(worker); // pass post construction
return worker;
}
}