我应该如何解决需要同时调用 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。问题是我不能同时调用 this
和 super
构造函数。
我也无法将第一个构造函数中的初始化提取到某些方法,因为我有一些 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)
之后调用一个方法来执行其余的初始化。
好的,所以,我有一个具体的问题。我有一个类似于此的 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。问题是我不能同时调用 this
和 super
构造函数。
我也无法将第一个构造函数中的初始化提取到某些方法,因为我有一些 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)
之后调用一个方法来执行其余的初始化。