繁体   English   中英

扩展一个类并在多个构造函数中处理最终变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM