簡體   English   中英

如何在Java中創建自上而下的重載構造函數

[英]How to create a top-down overload constructor in java

我目前正在開發一個android項目,我想在其中創建一個具有動態數量參數的對象。

一個RequestOperation對象將始終具有Type屬性,並應能夠使用0到3個可選的字符串屬性來創建,這些屬性存儲在一個名為requestParamsArrayList<String>屬性中。

在編寫構造函數時,我想到了以下想法:

是否可以創建“偽偽遞歸”構造函數,以便采用三個字符串的構造函數方法,將第三個字符串添加到對象,並調用采用兩個字符串的構造函數。 這將向對象添加第二個對象,然后調用采用一個字符串的構造函數,該操作將執行相同的操作,然后將帶有填充的requestParams數組列表的對象傳遞給不包含字符串的構造函數,僅添加Type屬性。

這樣可以避免懶惰的程序員一次又一次地編寫(實際上是很長時間)構造函數。

這是我的想象(非常簡化):

public class RequestOperation {

    public enum Type {
        //enum values and mappings
    }

    private String applicationUrl;
    private ArrayList<String> requestParams = new ArrayList<>();

    public RequestOperation(Type operationType) {
        this.applicationUrl = composeUrl(operationType, requestParams);
    }

    public RequestOperation(Type operationType, String paramFirst) {
        this.requestParams.add(0, paramFirst);
        new RequestOperation(operationType);
}

    public RequestOperation(Type operationType, String paramFirst, String paramSecond) {
        this.requestParams.add(0, paramSecond);
        new RequestOperation(operationType, paramFirst);
    }

    public RequestOperation(Type operationType, String paramFirst, String paramSecond, String paramThird) {
        this.requestParams.add(0, paramThird);
        new RequestOperation(operationType, paramFirst, paramSecond);
    }

恐怕使用這種方法時,我會在構造函數內部創建一個新對象,並且參數將被寫入錯誤的對象。 是否有機會將對象本身傳遞為以下構造函數調用的目標? 如果這根本不是一個好的方法,請告訴我,我仍在學習如何正確編程。

您可以使用以下形式的varargs:

public RequestOperation(Type operationType, String... parameters) {
    for(String param : parameters) {
       requestParams.add(param);
   }
}

這樣做的好處是,您還可以根據需要添加任意數量的請求參數。

編輯:如PPartisan的評論中所述,一種更為簡潔的方法是

public RequestOperation(Type operationType, String... parameters) {
   requestParams = Arrays.asList(parameters);
} 

為類RequestOperation定義一個靜態方法(如newInstance將是一個更好的方法,該方法將Type對象和List<String>作為參數,然后遞歸調用自身,直到List的長度為0,然后返回使用帶有Type對象的構造函數創建的RequestOperation。

我想說這是一種比您描述的方法更好的方法,因為使用您的方法將在每個遞歸調用中創建一個新的RequestOperation對象,我認為這不是一個很好的做法。

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM