@foonfyrick

Почему сеттер не срабатывает при присвоении аргумента конструктора?

Почему если аргумент конструктора присваивать к свойству, то сеттер не работает, а если его удалить и инициализировать свойство a, то сеттер работает?
class Test(b:Int) {
    var a:Int = b
        set(value) {
            if (value>0) field=1
            else field=-1
        }
}
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Kotlin
Android developer at Yandex
Ответ - потому что компилятор Котлина(точнее его создатели) считает, что это правильно. Оно компилируется в байткод, который аналогичен такому джава-коду:
public final class Test {
   private int a;

   public final int getA() {
      return this.a;
   }

   public final void setA(int value) {
      if (value > 0) {
         this.a = 1;
      } else {
         this.a = -1;
      }

   }

   public Test(int b) {
      this.a = b;
   }
}

Почему так - можно гадать, вот тут описаны возможные причины:
* ты можешь обратиться к field, который ещё не инициалирован
* ты можешь обратиться к другим полям, которые в исходнике ниже, и поэтому будут инициализированы позже.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы