как связать переменные так, когда я изменяю один из них оба изменяются? или только один верхний уровень - PullRequest
0 голосов
/ 07 января 2019

У меня есть 3 переменные A, b и c в классе под названием ONE

var a = 0
var b = 0
var c = 0

этот класс (класс ONE) является абстрактным и используется 3 классами (TWO, THREE, FOUR). выбранная переменная изменяется с помощью оператора when.

var chosenVariable:Long
        chosenVariable= when (sign){
            1-> a
            2-> b
            3-> c
            else -> a
        }

обратите внимание, что знак - это то, что пользователь вводит, чтобы решить, какая переменная выбрана.

мой вопрос когда я изменяю chosenVariable, я хочу, чтобы он изменил любую переменную, которая была установлена ​​a, b или c.

это возможно? Я думал, что это можно назвать инстансингом, но я не могу придумать что-то, ищущее таким образом. Я думаю, что мне нужно сделать это как-нибудь с сеттером и геттером?

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Если вы имеете в виду chosenVariable - это sign, либо:

может быть другая функция для установки / получения выбранных переменных (a, b, c), например:

var chosenVariable : Long = 0 // init value

fun set ( value : Int ) {
    when ( chosenVariable ) {
        // 1 -> a = value
        2 -> b = value
        3 -> c = value
        else -> a = value
    }
}
fun get ( ) {
    return when ( chosenVariable ) {
        // 1 -> a
        2 -> b
        3 -> c
        else -> a
    }
}

или вместо этого используйте MutableMap:

val variables = mutableMapOf <Long /* sign */, Int /* value */> (
    1 to 0, // a
    2 to 0, // b
    3 to 0, // c
)

// still with getter/setter like before, but with map
fun get ( ) = variables [ chosenVariable ]
fun set ( value : Int ) {
    variables [ chosenVariable ] = value
}
0 голосов
/ 07 января 2019

Вы можете использовать класс KMutableProperty0<> для хранения ссылки на примитивные переменные:

var chosenVariable: KMutableProperty0<Long> = when (sign) {
        1-> ::a
        2-> ::b
        3-> ::c
        else -> ::a
}

// set value
chosenVariable.set(7)

В настоящее время доступно только для глобальных переменных. Вот некоторая полезная информация .

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