この初期化の安全のですか?

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;
    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=25454&siteId=1