[英]Extending a class and handling a final variable in multiple constructors
我正在尝试扩展一个类,以在实现上稍有变化。 现在,该父类中的最终变量为:
private final float mIndicatorItemLength = DP * 4;
在类级别定义,我想从子类为该变量提供自定义值。 由于此变量是最终变量,因此我将其更改为从构造函数初始化。 我在这里有两个构造函数:
public HorizontalCirclePagerIndicatorDecoration()
引用为:
public HorizontalCirclePagerIndicatorDecoration() {
mIndicatorItemLength = DP * 4;
}
和
public HorizontalCirclePagerIndicatorDecoration(int colorActive, int colorInactive, int mIndicatorItemLength)
第一个构造函数是默认构造函数,第二个构造函数是我想从子类访问的构造函数,并使用子类的super关键字设置自定义值,例如:
public TPagerIndicator(int colorActive, int colorInactive) {
super(colorActive, colorInactive, mIndicatorItemLength);
}
我孩子的班级签名是:
TPagerIndicator extends HorizontalCirclePagerIndicatorDecoration
但是,我在这里遇到错误:无法在调用超类型构造函数之前引用TPagerIndicator.mIndicatorItemLength
。
现在,我想我将不得不删除
private final float mIndicatorItemLength = DP * 4;
在父类中。 这是正确的方法吗?
这将是正确的方法。 如您所知,子类必须至少调用一个超类构造函数。 在Java中,不允许使用仍未初始化的最终属性( mIndicatorItemLength
)。
class HorizontalCirclePagerIndicatorDecoration {
...
private final float mIndicatorItemLength;
HorizontalCirclePagerIndicatorDecoration() {
mIndicatorItemLength = DP * 4;
}
HorizontalCirclePagerIndicatorDecoration(
final int colorActive,
final int colorInactive,
final int mIndicatorItemLength) {
...
this.mIndicatorItemLength = mIndicatorItemLength;
}
...
}
class TPagerIndicator extends HorizontalCirclePagerIndicatorDecoration {
TPagerIndicator(
final int colorActive,
final int colorInactive) {
super(colorActive, colorInactive, 12.3F /* Explicit set */);
}
TPagerIndicator(
final int colorActive,
final int colorInactive
final int mIndicatorItemLength) {
super(colorActive, colorInactive, mIndicatorItemLength /* Input set */);
}
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.