Свойство интерфейса Kotlin: требуется только публичный геттер без публичного сеттера - PullRequest
2 голосов
/ 07 мая 2019

Я пытаюсь создать Интерфейс, который заставляет его производные классы иметь определенное свойство, но только с открытым геттером. Поскольку я не хочу разрешать изменения за пределами своей частной области, я не хочу, чтобы он реализовывал открытый набор.

interface Transaction{
   var transferDate: Date get //I only require a get, no set
}

class MoneyTransaction(){
   override var transferDate: Date get private set 
/*private set does not work*/
}

1 Ответ

5 голосов
/ 07 мая 2019

Свойство является средством доступа к некоторым данным.У вас будет получатель, а если свойство изменяемое, то и установщик.Поэтому вы можете переопределить любое объявленное свойство val свойством var:

interface Transaction {
   val transferDate: Date
}

class MoneyTransaction: Transaction {
   override lateinit var transferDate: Date
       private set 
}

Обратите внимание, что вам не нужно делать свойство lateinit var, если вы инициализируете его с объектом;Я просто добавил его, чтобы ваш пример компилировался правильно.

...