Как вы инициализируете поля 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 имеет краткий синтаксис для объявления свойств и их инициализации из основного конструктора»).