kotlin - 如何在 Kotlin 中获取变量的名称?
问题描述
我的应用程序中有一个 Kotlin 类,它有很多属性,我想要构建一个将变量名存储在字典中的方法。字典看起来像这样:
HashMap<String, Pair<Any, Any>>()
这样做的目的是存储对某个属性所做的更改,我将变量的名称存储为键,并在 Pair 中存储旧值和新值。为了通知更改,我使用观察者模式。因此,每当从属性调用 setter 时,都会通知更改并将其存储到字典中。
下面的代码导致以下结果:
var person = Person("Harry", 44)
person.age = 45
HashMap("age", (44, 45))
现在我只是将变量名硬编码为字符串,所以我的问题是:
Kotlin中如何动态获取变量名?
我在 Java 中看到了同样的问题:Java Reflection: How to get the name of a variable?
还有一些关于同一主题的其他问题声称这是不可能的:Get the name property of a variable
我可以理解无法获取变量的名称,因为简单的编译器没有该信息,但我仍然很想看看其他人是否有任何解决此问题的方法。
解决方案
正如 Kotlin文档中有关 Reflection所述:
val x = 1
fun main() {
println(::x.get())
println(::x.name)
}
该表达式的::x
计算结果为 type 的属性对象KProperty<Int>
,这允许我们使用get()
该属性读取其值或检索属性名称name
。
推荐阅读
- php - 在特定位置的多维数组中插入新键值
- serverless-framework - 使用 serverless-dotenv-plugin 更正 .env 文件
- linux - 如何删除 2017 年 1 月 1 日之前的所有文件
- jquery - 数组发布为空
- vba - 如何优化下面的VB代码?运行需要花费大量时间,并且 Excel 每次都挂起
- sql - 如何从oracle中的SELECT语句本身中选择自己的表名和列名?
- ios - 如何使用 IOS swift 在 Instagram 和 slack 上分享带有标题的图像?
- c# - 在 RedirectToAction 之后从过滤器中获取模型
- c# - 有没有办法仅在断言失败时评估断言的第二个参数?
- php - 在 laravel 中管理多个角色