将两个构造函数简化为一个

Simplifying two constructors into one

下面是我的响应对象,我用它来构建响应并将其发送回调用者,因为我有一个处于 request/response 模式的系统。

public class DataResponse {

    private String response;
    private DataErrorEnum error;
    private DataStatusEnum status;

    public DataResponse(String response, DataErrorEnum error, DataStatusEnum status) {
        this.response = response;
        this.error = error;
        this.status = status;
    }

    public String getResponse() {
        return this.response;
    }

    public DataErrorEnum getError() {
        return this.error;
    }

    public DataStatusEnum getStatus() {
        return this.status;
    }
}

有时在我的应用程序代码中,我会像这样创建响应对象:

new DataResponse(null, errorEnum, statusEnum);

如您所见,我明确设置了 null,这没问题,但有时它会导致混淆哪个字段为空,因此我决定在 DataResponse class 中创建另一个构造函数,如下所示:

public class DataResponse {

    private String response;
    private DataErrorEnum error;
    private DataStatusEnum status;

    public DataResponse(String response, DataErrorEnum error, DataStatusEnum status) {
        this.response = response;
        this.error = error;
        this.status = status;
    }

    // new constructor
    public DataResponse(DataErrorEnum error, DataStatusEnum status) {
        this.response = null;
        this.error = error;
        this.status = status;
    }

    public String getResponse() {
        return this.response;
    }

    public DataErrorEnum getError() {
        return this.error;
    }

    public DataStatusEnum getStatus() {
        return this.status;
    }
}

这样我现在就可以像这样创建对象:通过这种方式,我不需要发送空响应,因为默认情况下这是在我的其他构造函数中。

new DataResponse(errorEnum, statusEnum);

现在我的问题是 - 有什么方法可以将我的两个构造函数合二为一吗?或者我总是需要两个构造函数?

您不能将两个构造函数合并为一个。

但是您可以声明构造字段的主构造函数,其他构造函数只需调用它,例如。

    // new constructor
public DataResponse(DataErrorEnum error, DataStatusEnum status) {
    this(null, error, status);
}

public DataResponse(String response, DataErrorEnum error, DataStatusEnum status) {
    this.response = response;
    this.error = error;
    this.status = status;
}

如果响应始终为空,则第二个构造函数适用。两个构造函数都在做类似的功能。为了代码的可读性更好,最好有一个构造函数。