[英]Overload Constructor
我有一個包含 3 個字段的 MyClass。 但我需要將數據類型info
更改為Info
的 object ,以容納另外 2 個字段。 字符串信息將等同於info.text
。 但是在 MyClass 構造函數上有很多 if 調用,我們不想更改它,因為唯一需要的字段是info.text.
. 我怎樣才能重載構造函數? 對於某些人來說,將使用參數 object Info
而不是 String 來調用新的構造函數。
public class MyClass {
private String status;
private String reason;
private String info;
public MyClass(final String status, final String reason, final String info) {
this.status= status;
this.reason= reason;
this.info= StringUtils.trimToNull(info);
}
}
@Getter
@Setter
public class Info {
private String text;
private String image;
private String details;
}
如果我沒看錯,你可能想要這樣的東西:
public class MyClass {
private String status;
private String reason;
private Info info;
public MyClass(final String status, final String reason, final Info info) {
this.status= status;
this.reason= reason;
this.info = info;
}
和
public MyClass(final String status, final String reason, final String infoText) {
this(status, reason, new Info().setText(StringUtils.trimToNull(infoText));
}
含義:您將 class 更改為具有信息 object,而不是“信息”字符串。 然后您允許通過傳遞信息 object 創建您的 class; 但是您保留了現有的構造函數,但調用了新的構造函數,並傳入了一個使用text
屬性設置的信息 object。
當然,只有當您的設置器返回他們設置的 object 時才有效。 如果您的 setter 具有返回類型void
,那么調用另一個構造函數的“技巧”是不可能的,在這種情況下,您最終會得到兩個非常相似但構造函數略有不同的主體。
擴展 GhostCat 的答案。 按照我的理解,您需要保留舊的構造函數、getter 和 setter 以支持 Legacy。 您可以替換String info
字段,但仍然需要它的 setter 和 getter。 您可以重載setInfo()
方法並為新字段添加新的 getter。 此外, Info
class 需要重寫Info
class 中的toString()
方法,以返回一個與遺留代碼所期望的格式相同的String
。
public class MyClass {
private String status;
private String reason;
private Info info;
// constructors
public void setInfo(String info) {
// convert String to Info and set in field
}
public String getInfo () {
return info.toString(); // need to override toString() in Info class
}
// new getter and setter
// Overloaded method (different param list)
public void setInfo (Info info) {
this.info = info;
}
// cannot use same name because param list is the same
public Info getInfo2() {
return info;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.