如何链接变量,以便当我修改其中一个都被修改时?或只是最高一级

时间:2019-01-07 18:09:12

标签: variables kotlin

在名为ONE的类中,我有3个变量A,b和c

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

该类(类ONE)是抽象的,并由3个类(两个,三个,四个)使用。通过使用when语句,所选变量会发生变化。

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

请注意,符号是用户输入以确定选择哪个变量的输入。

我的问题是。当我修改chosenVariable时,我希望它更改设置为a,b或c的任何变量。

这可能吗?我以为它可以称为实例化,但是我似乎无法提出任何类似的搜索方式。我想我需要用setter和getter来做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以使用KMutableProperty0<>类来保存对原始变量的引用:

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

// set value
chosenVariable.set(7)

当前仅可用于全局变量。 Here is some useful info

答案 1 :(得分:0)

如果您的意思是chosenVariablesign,则可以:

可能存在另一个用于设置/获取所选变量(abc)的函数,例如:

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
}