在超类构造函数中访问局部变量

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(","));
}

还有一个替代选项,其中超类构造函数调用一个在子类中被重写的虚方法,但那是 真的 脆弱的,它非常可怕,我什至不会去举个例子。