Расширение класса и обработка окончательной переменной в нескольких конструкторах - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь расширить класс для небольшого изменения в реализации.Теперь в этом родительском классе есть конечная переменная:

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

Однако я получаю здесь ошибкуas: Невозможно сослаться на TPagerIndicator.mIndicatorItemLength до вызова конструктора супертипа.

Теперь я думаю, что мне придется удалить последний модификатор на

private final float mIndicatorItemLength = DP * 4;

в родительском классе.Это правильный путь?

1 Ответ

0 голосов
/ 10 февраля 2019

Это был бы правильный подход.Как вы знаете, подкласс должен по крайней мере вызывать один конструктор суперкласса.Использование окончательного свойства, которое все еще не инициализировано (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 */);
   }

   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...