Используйте анонимную функцию при установке возвращаемого значения для геттера в Kotlin - PullRequest
0 голосов
/ 24 мая 2019

В Kotlin, когда вы создаете пару геттер / сеттер, вы обычно устанавливаете геттер, используя встроенный код.Но мне интересно, можно ли заменить встроенный код анонимной функцией:

var UserSettings: UserSettings?
    get() = getUserSettings() // Replace this with an anonymous function?
    set(value) {
        putPref(USER_SETTINGS, Json.stringify(UserSettings.serializer(), value!!))
    }

private fun getUserSettings(): UserSettings? {
    val info = getPref(KEY_USER_SETTINGS)
    return Json.parse(UserSettings.serializer(), info!!)
}

Можно ли заменить getUserSettings () анонимной функцией?В приведенном выше коде у меня есть отдельная функция getUserSettings, которую я хотел бы разместить сразу после get () =

Ответы [ 3 ]

3 голосов
/ 24 мая 2019

Да, вы можете. Просто взгляните на геттеры и сеттеры - свойства поддержки , где есть (первый и единственный пример) упоминание get() { вместо get() =. Ваш образец будет выглядеть следующим образом:

var UserSettings: UserSettings?
  get() { 
    val info = getPref(KEY_USER_SETTINGS)
    return Json.parse(UserSettings.serializer(), info!!)
  }
  set(value) {
    putPref(USER_SETTINGS, Json.stringify(UserSettings.serializer(), value!!))
  }
1 голос
/ 24 мая 2019

я не знаю, это то, что вы просите, но это может быть полезно

var v: Int? = null
    get() = run {
        return field
    }
    set(value) = run {
        field = value
    }

в этом случае getter должен быть равен Int?и сеттер всегда должен быть равным единице.поэтому в процессе мы возвращаем, что типы

0 голосов
/ 25 мая 2019

Я думаю, что ответ @Roland действителен.

Имейте в виду, что поддерживая = перед анонимной функцией, компилятор возвращает ошибку, как вы описываете.

Можете ли вы удвоитьпроверить, что вы НЕ пишете что-то подобное?

var UserSettings: UserSettings?
  get() = { ... }

И что вы пишете:

var UserSettings: UserSettings?
  get() { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...