Как вы инициализируете поля val с параметрами конструктора в Kotlin?

В Java вы можете объявить частную конечную переменную-член, а затем инициализировать ее из своего конструктора, что очень полезно и очень распространено:

      class MyClass {

  private final int widgetCount;

  public MyClass(int widgetCount) {
    this.widgetCount = widgetCount;
  }

Как в Kotlin инициализировать конечные переменные-члены (типы val) значениями, передаваемыми в конструктор?

3 ответа

Это так же просто, как следующее:

      class MyClass(private val widgetCount: Int)

Это создаст конструктор, принимающий Intв качестве единственного параметра, который затем присваивается свойству.

Это также не будет генерировать сеттер (потому что это val) или геттер (потому что это private) для widgetCountимущество.

А также определение valв параметрах конструктора вы можете использовать блок для выполнения некоторой общей настройки, если вам нужно выполнить некоторую работу перед присвоением значения:

      class MyClass(widgetCount: Int) {

  private val widgetCount: Int
  
  init { 
     this.widgetCount = widgetCount * 100
  }
}

initблоки могут использовать параметры в первичном конструкторе, и любые вторичные конструкторы, которые у вас есть, должны вызывать первичный в какой-то момент, поэтому эти блоки инициализации всегда будут вызываться, а первичные параметры всегда будут там.

Лучше всего прочитать все это на самом деле!Конструкторы

      class MyClass(private val widgetCount: Int)

Вот и все. Если в Java у вас также есть тривиальный геттер public int getWidgetCount() { return widgetCount; }, удалять private.

Дополнительные сведения см. в документации (в частности, в разделе «Kotlin имеет краткий синтаксис для объявления свойств и их инициализации из основного конструктора»).

Другие вопросы по тегам