variables - 在Kotlin中,是否可以使用变量来调用方法或属性?

标签 variables properties kotlin evaluation

简而言之,我有一个变量,告诉我需要在对象上修改哪个属性,但是不能将该属性称为变量。

data class MyDataClass(var one: String, var two: Int)

fun doSomething() {
    myData = MyDataClass("first", 2)

    val propertyImInterestedIn = "one"

    myData.{propertyImInterestedIn} = "second" // How do I do this?

    assertEquals("second", myData.one)
}

最佳答案

如果可以直接引用字段,则可以在编译时执行此操作,也可以在运行时执行,但会失去编译时的安全性:

// by referencing KProperty directly (compile-time safety, does not require kotlin-reflect.jar)
val myData = MyDataClass("first", 2)
val prop = myData::one
prop.set("second")

// by reflection (executed at runtime - not safe, requires kotlin-reflect.jar)
val myData2 = MyDataClass("first", 2)
val reflectProp = myData::class.memberProperties.find { it.name == "one" }
if(reflectProp is KMutableProperty<*>) {
    reflectProp.setter.call(myData2, "second")
}

关于variables - 在Kotlin中,是否可以使用变量来调用方法或属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51715815/

相关文章:

javascript - 如何有效地计算 JavaScript 中对象的键/属性的数量

kotlin 检查类型不兼容的类型

kotlin - kotlin 中的挂起函数/方法是如何工作的?

java - 如何在 map View 上显示自定义信息窗口

css - 在 Sass 中将变量设置为 @mixin?

C++:作为指针的全局变量

bash - awk 从 csv 文件总结 for 循环中的最后 n 个元素

Python:在字符串中查找变量

c# - 数据绑定(bind)到只读属性

C# 字段和属性