1

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

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 ?
    }
}

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

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

4

1 回答 1

4

通常的解决方案是翻转构造函数之间的依赖关系:调用super(someValue)insideB(int someValue)和 call this(DEFAULT)inside B()。但是,您需要找出适用DEFAULT于这种情况的有效值——也就是说,无参数构造函数someValue可以使用的默认值(通常有效)。B()null

如果A()A(int someValue)根本不同的事情,这将不起作用,但这表明该类A可能设计不佳(换句话说:它应该是可行的)。

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

于 2021-12-13T19:14:30.060 回答