Какова реализация стандартных средств доступа в Kotlin? - PullRequest
0 голосов
/ 14 мая 2018

У меня есть такой класс

class Square(var width: Int, var height: Int) {
    var color : String = "red"
}

Насколько я понимаю, компилятор Kotlin будет считать, что ширина, высота и цвет являются свойствами класса Square, и поэтому он автоматически сгенерирует setter и getter для этих свойств.

Со свойством color, я думаю, что его получатель и установщик должны понравиться вот так

var color : String = "red"
get() = field
set(value) { field = value}

Но как насчет установщика по умолчанию и получателя свойств width и height. Эти свойства не имеют значений инициализации, поэтому у них не может быть идентификатора «поля» в методах получения и установки. Кто-нибудь знает ответ?

1 Ответ

0 голосов
/ 14 мая 2018

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

В противном случае реализация по умолчанию для их получателей (и установщиков для var s) такая же, как и для свойств в теле класса. Они просто возвращают (и устанавливают) значение поля поддержки.

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

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