[英]Overriding toString() when you have two constructors
我當前的類, SeriesCircuit
類,包含兩個構造函數:
public SeriesCircuit(Circuit input1, Circuit input2)
{
this.circuit1 = input1;
this.circuit2 = input2;
}
public SeriesCircuit(ParallelCircuit parallelCircuit, Circuit circuit1)
{
this.parallelCircuit = parallelCircuit;
this.circuit1 = circuit1;
}
使用.toString()
方法,我可以打印出第一個構造函數的值:
public String toString()
{
return circuit1.getResistance() + " + " + circuit2.getResistance();
}
注意: .getResistance()
返回的值只是雙倍,因此示例輸出將類似於此字符串: 2.0 + 3.0
。
我的問題是,因為我有兩個提供兩種不同輸入類型的構造函數,我如何只覆蓋一個.toString()
來輸出兩種不同類型的構造函數輸入?
例如,在我的主要內容中,我這樣做:
SeriesCircuit s1 = new SeriesCircuit(new Circuit(2.0), new Circuit(3.0));
SeriesCircuit s2 = new SeriesCircuit(new ParallelCircuit(s1, new Circuit(4.0)), new Circuit(1.0));
我可以使用System.out.println(s1)
打印出s1
,但是因為我從未為構造函數2指定.toString()
條件,所以我希望得到一個NullPointerException
。
在不基於構造函數的實例字段上構造你的toString()
, 它必須是一些描述性的和簡短的 。
如果需要,那么您可以使用布爾標志或不使用null檢查值,否則您將在輸出中獲得null
。
使用StringBuilder#append()或String#concat()附加字符串值。
值得一讀
無論你有哪些構造函數, toString()
都應該反映對象的狀態,不多也不少。 通常,從toString()
返回的String將顯示對象字段的狀態,如果某些字段為null,則也應顯示此字段。
我主要使用toString()
進行調試,再次在程序運行時顯示對象的狀態。 它實際上不應該用於生產輸出,這就是為什么我覺得你的問題不是問題。
您可以設置一個布爾變量,對於一個構造函數為true,對另一個構造函數為false。 在toString中,您只需對該變量執行if else,並以這種方式執行兩個不同的輸出。
首先檢查屬性parallelCircuit
是否已初始化(如果它為null
):
public String toString() {
if(parallelCircuit == null) {
return circuit1.getResistance() + " + " + circuit2.getResistance();
}
else {
return parallelCircuit.getResistance() + " + " + circuit1.getResistance();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.