簡體   English   中英

當你有兩個構造函數時覆蓋toString()

[英]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.

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