在构造函数中调用私有方法是一个好的设计吗?

Bet*_*eto 5 java constructor design-patterns initialization

说我有以下课程:

public class FormContainer {

    @EJB
    private ExternalDao externalDao; // uses dependency Injection

    private final OrderForm orderForm;

    private final List<OrderFormContent> formContents;

    public FormContainer(OrderForm orderForm) {
        this.orderForm = orderForm
        initializeOrderForm();
    }

    private void initializeOrderForm() {
        formContents = externalDao.getFormContents(orderForm);
        // similar for any other properties
    }

    // getters & setters
}
Run Code Online (Sandbox Code Playgroud)

我正在使用这个类来保存我需要通过应用程序引用的所有字段.我仍在学习良好的设计和糟糕的设计实践,所以我想知道这个糟糕的设计是否初始化orderForm的属性.

如果是这样,怎么可以改进?

Boh*_*ian 5

没关系。

要记住的重要规则是不允许this“逃逸”,这意味着不要让实例通过匿名/内部类直接或隐式传递到另一个“进程”(以最广泛的术语定义)。

原因是你的实例在其他进程拿到的时候可能没有完全初始化,这会导致不一致和奇怪的bug。


Ner*_*lin 3

可以从构造函数中调用私有方法来初始化类内部使用的一些数据。只需确保您的方法没有“副作用”,例如您的类的用户在调用构造函数时可能不会想到的长期方法。

如果您有这样的方法,也许您应该提取类的用户在准备好时将使用的 Initialize 方法。