当你有两个构造函数时覆盖toString()

时间:2014-04-13 01:27:08

标签: java tostring

我当前的类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));

我可以使用s1打印System.out.println(s1)就好了,但由于我从未为构造函数2指定.toString()条件,我希望得到NullPointerException。< / p>

4 个答案:

答案 0 :(得分:6)

在不基于构造函数的实例字段上构建您的toString(),并且必须是一些描述性和简短的

如果您需要,则可以使用布尔标志或非空值检查,否则您将在输出中获得null

使用StringBuilder#append()String#concat()附加字符串值。


修改

值得一读

答案 1 :(得分:2)

无论您使用哪种构造函数,toString()都应该反映对象的状态,不多也不少。通常,从toString()返回的字符串将显示对象字段的状态,如果某些字段为空,则也应显示该字段。

我主要使用toString()进行调试,再次在程序运行时显示对象的状态。它实际上不应该用于生产输出,这就是为什么我觉得你的问题不是问题。

答案 2 :(得分:0)

您可以设置一个布尔变量,对于一个构造函数为true,对另一个构造函数为false。在toString中,你只需对该变量执行if else,然后以这种方式执行两个不同的输出。

答案 3 :(得分:0)

首先检查属性parallelCircuit是否已初始化(如果它是null):

public String toString() {
    if(parallelCircuit == null) {
        return circuit1.getResistance() + " + " + circuit2.getResistance();
    }
    else {
        return parallelCircuit.getResistance() + " + " + circuit1.getResistance();
    }
}