这个初始化安全吗

  • 本文关键字:安全 初始化 java
  • 更新时间 :
  • 英文 :


我有一个这样的类:

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

但是下面的那个怎么样?这是正确的吗?

public class Worker {
    private final WorkHelper helper = new WorkHelper(this);
    private final SomeClass some;
    public Worker(SomeClass some) {
        this.some = some;
    }
}

所有版本都不安全;它们都是"让CCD_ 1逃逸"的情况。

考虑创建一个工厂方法,在构建完成后创建工人助手,例如:

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

最新更新