Как сделать сеттер приватным в Kotlin для нефинальных переменных? - PullRequest
0 голосов
/ 27 ноября 2018

Мне нужно создать класс данных примерно так:

data class Cat(var toys:Int=3, val type:String):Animal(){
    ...
}

Animal - это абстрактный класс с полями для глаз и ног и т. Д.

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

fun addQuota(){toys+=4}

, как мне сделать это чисто?Я все еще хочу публичный получатель, частный поселенец, но я не хочу, чтобы переменная была окончательной.А также, этот класс данных является Entity for Room.

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Получаются следующие работы:

data class Cat(private var toys:Int=3, val type:String):Animal(){
    ...
    fun getToys()=toys
}
0 голосов
/ 29 ноября 2018

Я видел, что вы уже нашли решение, которое удовлетворит вас, но, может быть, вы можете рассмотреть это:

class Cat(toys: Int = 3, val type: String) : Animal() {

    var toys = toys
        private set

    fun addQuota() {
        toys += 4
    }

}
0 голосов
/ 27 ноября 2018

Вы можете сделать это, используя свойство конструктора в качестве вспомогательного поля для свойства toys:

data class Cat(val type: String, private var toysField: Int = 3 ):Animal(){

    var toys = toysField
    private set(value){
        toysField = value
    }

    fun addQuota(){toys += 4}

}

abstract class Animal

Я надеюсь, что это работает с комнатой.

Источник https://discuss.kotlinlang.org/t/private-setter-for-var-in-primary-constructor/3640/10

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