我当前的类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>
答案 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();
}
}