在名为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来做到这一点?
答案 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)
如果您的意思是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
}