小编luk*_*s.j的帖子

Kotlin:按照定义的顺序通过反射获取数据类的成员

假设有以下简单的示例数据类:

data class SomeDataClass(
  var id: String,
  var name: String,
  var deleted: String
)
Run Code Online (Sandbox Code Playgroud)

使用以下代码可以获取属性(并设置或获取它们的值):

import kotlin.reflect.full.memberProperties

val properties = SomeDataClass::class.memberProperties

print(properties.map { it.name })   // prints:   [deleted, id, name]
Run Code Online (Sandbox Code Playgroud)

print 语句中的映射将返回一个列表,其中包含按字母顺序排列的属性名称。我需要按照源代码中定义的顺序列出列表,在本例中为:[id、name、deleted]。

单纯通过反思似乎无法实现。我能想到的唯一解决方案是使用定义顺序的辅助类:

val SomeDataClass_Order = listOf("id", "name", "deleted")
Run Code Online (Sandbox Code Playgroud)

对于一两个类来说这不是问题,但对于数百个数据类来说却是个问题,其中最大的一个数据类多达近一百个属性。

任何想法都会受到欢迎。我不需要详细的代码,而是需要提示(比如解析源代码、注释等)。

reflection kotlin

6
推荐指数
1
解决办法
3747
查看次数

Kotlin 中 MutableMap 和 MutableList 的空安全性

我正在尝试运行这个例子

fun main() {
    val mlist: MutableList<String> = mutableListOf<String>()
    val mapp: MutableMap<Int, MutableList<String>> = mutableMapOf(1 to mlist)
    println(mapp)
    mapp[1].add("a") // Correct is mapp[1]?.add("a")
    println(mapp)
}
Run Code Online (Sandbox Code Playgroud)

在线 Kotlin 编译器

编译器正在抱怨 Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type MutableList<String>?.

尽管我已经定义了MutableList<String>为什么编译器会说有关MutableList<String>?.

什么编译器比我更懂?!我在这里缺少什么?

kotlin kotlin-null-safety

1
推荐指数
1
解决办法
587
查看次数

标签 统计

kotlin ×2

kotlin-null-safety ×1

reflection ×1