Инициализация поля, которое имеет геттер и сеттер?

Я создал класс, который имеет примерное поле в Котлине

class SomeClass { var smth: String = "Initial value" get() = "Here it is" set(value) { field = "it is $value" } } 

Когда я создаю объект класса и вызываю smth поле, он все равно вызовет свойство get() .

  val myValue = SomeClass().smth// myValue = "Here it is" 

Итак, возникает вопрос: почему мы должны инициализировать поле, которое имеет геттер?

  var smth: String // Why this gives error? get() = "Here it is" set(value) { field = "it is $value" } 

Он всегда будет возвращать значение из свойства get() , не так ли?

    Я просто думаю, что это потому, что компилятор недостаточно умен, чтобы сделать вывод, что он не является нулевым.

    На самом деле очень похожий код, представленный из официального документа здесь https://kotlinlang.org/docs/reference/properties.html

     var stringRepresentation: String get() = this.toString() set(value) { setDataFromString(value) // parses the string and assigns values to other properties } 

    По-видимому, этот код не будет компилироваться, если конструктор, подобный

     constructor(stringRepresentation: String) { this.stringRepresentation = stringRepresentation } 

    добавлен.

    У вас есть поддержка поля field в сеттере, поэтому мы должны инициализировать, см. Эту ссылку

    Intereting Posts
    метод расширения для класса утилиты из внешней библиотеки Kotlin: Как я могу получить фактический общий тип T в OneClass <T> во время выполнения как правильно инициализировать общий ресурс в kotlintest 2.x (interceptSpec) Почему не смотрит вперед и не смотрит работу Regex в Котлин? Ссылка на вложенную собственность Котлин Как изменить свойство Kotlin 'this property с подсветкой' редактора кода в IntelliJ? ViewPager во Фрагменте не работает второй раз Получение учета с использованием Anko SQLite в Котлине Не удается получить доступ к EditText или другим компонентам пользовательского интерфейса с помощью Kotlin Почему var i начинается с 0 в Котлине? Ошибка ввода типа. Попробуйте указать тип аргументации: Kotlin Лучший способ комбинировать целые флаги с использованием Kotlin? Весенняя загрузка с Jetty + Jersey всегда показывает 404 Вызов действия по ссылке в Котлине Карта Котлина с ненулевыми значениями