[英]How to create a top-down overload constructor in java
我目前正在開發一個android項目,我想在其中創建一個具有動態數量參數的對象。
一個RequestOperation
對象將始終具有Type
屬性,並應能夠使用0到3個可選的字符串屬性來創建,這些屬性存儲在一個名為requestParams
的ArrayList<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.