java - 在多个构造函数中扩展一个类并处理一个最终变量
问题描述
我正在尝试扩展一个类以在实现上有细微的变化。现在这个父类中有一个最终变量:
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;
在父类中。这是正确的方法吗?
解决方案
这将是正确的方法。如您所知,子类必须至少调用一个超类构造函数。mIndicatorItemLength
Java 中不允许使用尚未初始化的最终属性 ( )。
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 */);
}
...
}
推荐阅读
- linux - 为什么我的变量值在运行两个或多个会话时会发生变化?
- windows-services - Windows 故障转移群集中的组托管服务帐户
- javascript - 如何在 React 中发送之前删除空状态输入值
- angular - NullInjectorError:没有 BsDropdownConfig 的提供程序
- google-bigquery - Google bigquery 在使用 NOT IN 时选择 NULL 值
- python - 使用opencv,如何将多个文本放在不同的时间戳中?
- python - 在 S3 中查找特定文件的最后修改日期
- reactjs - 如何在反应中接收字体加载事件?
- python - py manage.py 运行服务器在 vscode 编辑器中不起作用
- linux - 将文件移动到另一个目录中的目录并在一个命令行中重命名它?