Как увеличить целочисленное поле в классе данных Kotlin - PullRequest
0 голосов
/ 17 июня 2020

У меня есть класс данных:

data class MyAlarmStatus(
    val notifyTimes: Int
)

То, что я хотел бы сделать, вызвать этот класс данных, одновременно увеличивая целочисленное поле:

val myAlarmStatus = MyAlarmStatus(
                notifyTimes++
            )

Однако это не компилируется из-за неразрешенной ссылки в этом поле. У кого-нибудь есть идея, как этого добиться?

Ответы [ 3 ]

2 голосов
/ 17 июня 2020

Если вы хотите иметь возможность создать инкрементную версию существующего экземпляра класса, вы можете дать ему операторную функцию:

data class MyAlarmStatus(
    val notifyTimes: Int
) {
    operator fun inc() = MyAlarmStatus(notifyTimes + 1)
}

//Usage:
var alarmStatus = MyAlarmStatus(1)
alarmStatus++ //Instantiates new instance with incremented property value and assigns it to the var

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

var lastNotifyTimes = 0

var alarmStatus = MyAlarmStatus(++lastNotifyTimes)
1 голос
/ 17 июня 2020

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

  1. Создайте объект MyAlarmStatus и попробуйте этот объект val myAlarmStatus = MyAlarmStatus (0) и myAlarmStatus.notifyTimes = + 1
  2. И попробуйте, как вы написали, ставка установлена значение по умолчанию.
0 голосов
/ 17 июня 2020

Если мы проверим это выражение

val myAlarmStatus = MyAlarmStatus(
                notifyTimes++
            )

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

Когда я это читаю, функция copy - это первое приходит мне в голову. Как это класс данных:

var alarmStatus = alarmStatus.let{ old -> it.copy(notifyTimes= old.notifyTimes+1) }
...