在超类构造函数中访问局部变量
Access local variables in superclass constructor
我有一个超级 class 有这个构造函数:
public Super(String p){
String[] result = p.split(",");
setA(result[0]);
setB(result[1]);
setC(result[2]);
setD(result[3]);
setE(result[4]);
}
然后我有一个子class,我想在其中使用相同的构造函数,但再添加 2 个字符串。这是我的代码:
public Sub(String d){
super(d);
setF(result[5]);
setG(result[6]);
}
使用此代码时出现未指定结果的错误。我该如何解决这个问题?
基本上您需要在子类构造函数中再次进行拆分 - 局部变量 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(","));
}
还有一个替代选项,其中超类构造函数调用一个在子类中被重写的虚方法,但那是 真的 脆弱的,它非常可怕,我什至不会去举个例子。
我有一个超级 class 有这个构造函数:
public Super(String p){
String[] result = p.split(",");
setA(result[0]);
setB(result[1]);
setC(result[2]);
setD(result[3]);
setE(result[4]);
}
然后我有一个子class,我想在其中使用相同的构造函数,但再添加 2 个字符串。这是我的代码:
public Sub(String d){
super(d);
setF(result[5]);
setG(result[6]);
}
使用此代码时出现未指定结果的错误。我该如何解决这个问题?
基本上您需要在子类构造函数中再次进行拆分 - 局部变量 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(","));
}
还有一个替代选项,其中超类构造函数调用一个在子类中被重写的虚方法,但那是 真的 脆弱的,它非常可怕,我什至不会去举个例子。