我应该如何解决需要同时调用 this() 和 super() 的问题?

How should i solve a problem with needing to call this() and super() at the same time?

好的,所以,我有一个具体的问题。我有一个类似于此的 class 结构(为简单起见进行了简化)。

class A {
    A() {
        // long initialization
    }

    A(int someValue) {
        this();
        // do something with someValue
    }
}

class B extends A {
    B() {
        super();
        // some long initialization
    }

    B(int someValue) {
        // What should i do here ?
    }
}

但是现在,我希望能够使用第二个构造函数构造 class B。但是第二个构造函数应该调用 super(someValue) 构造函数来使用 someValue 参数,但同时它需要调用 this() 来不必重复这个 class。问题是我不能同时调用 thissuper 构造函数。

我也无法将第一个构造函数中的初始化提取到某些方法,因为我有一些 final 字段需要在构造函数中初始化以保留 final.

通常的解决方案是翻转构造函数之间的依赖关系:在 B(int someValue) 中调用 super(someValue),在 B() 中调用 this(DEFAULT)。但是,您需要为这种情况找出一个有效的 DEFAULT — 即 someValue 的默认值,可以由无参数 B() 构造函数(null 经常有效)。

如果 A()A(int someValue) 做根本不同的事情,这将不起作用,但这表明 class A 可能设计不佳(在其他话:应该可行)。

作为替代方案,只需让 B()B(int someValue) 在调用 super()/super(someValue) 之后调用一个方法来执行其余的初始化。