我有一个具有此构造函数的超类:
public Super(String p){
String[] result = p.split(",");
setA(result[0]);
setB(result[1]);
setC(result[2]);
setD(result[3]);
setE(result[4]);
}
然后我有一个子类,我想使用相同的构造函数,但添加2个字符串。这是我的代码:
public Sub(String d){
super(d);
setF(result[5]);
setG(result[6]);
}
使用此代码我收到一条未指定结果的错误。我该如何解决这个问题?
答案 0 :(得分:3)
基本上你需要在子类构造函数中再次进行拆分 - 局部变量result
在子类构造函数中不可用:
public Sub(String d){
super(d);
String[] result = d.split(",");
setF(result[5]);
setG(result[6]);
}
是的,它最终会重复工作,但这有点难以避免。你可以通过一个私有子类构造函数来获取String[]
,并使用工厂方法来进行拆分:
protected Super(String[] result) {
setA(result[0]);
setB(result[1]);
setC(result[2]);
setD(result[3]);
setE(result[4]);
}
protected Super(String d) {
this(d.split(","));
}
...
private Sub(String[] result) {
super(result);
setF(result[5]);
setG(result[6]);
}
public static Sub fromString(String d) {
return new Sub(d.split(","));
}
有一个替代选项,其中超类构造函数调用在子类中重写的虚方法,但是真的脆弱且非常可怕,我甚至不打算提供示例。< / p>