2015-05-03 25 views
1

下面是我用來構造一個響應並將其發回給調用者的響應對象,因爲我有一個請求/響應模式的系統。將兩個構造函數簡化爲一個

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類的另一個構造:

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

現在我的問題是 - 有沒有什麼辦法可以將兩個構造函數合併爲一個?或者我總是需要兩個構造函數?

+0

如果通過「將兩個構造函數合併爲一個」來表示您希望能夠將兩個或三個參數傳遞給同一個構造函數,否則不能這樣做。你已經做了什麼錯了? – moarCoffee

回答

7

您不能將兩個構造函數合併爲一個。

但是,您可以聲明構造您的字段的主構造函數,而其他構造函數只是調用它,例如。

// 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; 
} 
+0

謝謝,這正是我想問的。 – john

0

如果響應總是爲空,那麼第二個構造函數保持不變。這兩個構造函數都在做類似的功能。爲了更好地讀取代碼,最好有一個構造函數。

相關問題