kotlin - 如何动态遍历kotlin中一个类的所有字段?
问题描述
我想动态遍历 kotlin 中一个类的所有字段。目的是我想通过加入所有字段将类对象转换为 TSV。由于会有很多子类,因此动态地执行此操作会很棒。经过一番调查,我在下面找到了解决方案。它确实有效,但字段的顺序与每个字段的声明顺序不一致。
我认为注释可以工作,但不确定如何。任何的想法?谢谢!
abstract class BaseModel {
fun toTSV(): String {
return this::class.memberProperties.map {
it.getter.call(this).toString()
}.joinToString("\t")
}
}
class Model (
val model_id: String,
val name: String,
val version: Int,
val desc: String
) : BaseModel()
fun main(args : Array<String>) {
val model = Model(
model_id = "mid",
name = "model name",
version = 1,
desc = "some desc"
)
println(model.toTSV())
}
上面的代码产生:
some_desc mid model_name 1
但我期待:
mid model_name 1 some_desc
就像类中字段的顺序一样。
解决方案
我建议您在每个模型上覆盖 toString,以获取每个字段中的制表符分隔值:)
class MyModel {
var id: Long = 0L
...
override fun toString(): String {
val sb = StringBuilder()
sb.append("class MyModel {\n")
sb.append(" id: ").append(toIndentedString(id)).append("\n")
sb.append("\n}")
return sb.toString()
}
/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private fun toIndentedString(o: Any?): String {
return o?.toString()?.replace("\n", "\n ") ?: "null"
}
}
这对我每次都有效。
推荐阅读
- tensorflow - Tensorflow 中具有复杂输入的 Gamma 函数
- amazon-s3 - S3 SignedURL UploadPart 因 SignatureDoesNotMatch 而失败
- rules - 如何修复 CLIPS 的“ProfileInfoCommand”的核心转储?
- android - 将项目列表添加到回收站视图
- r - 如何在ggplot2 barplot中标记子组
- typescript - 链接静态 .plugin() 类方法以多次扩展实例 API
- wordpress - 嵌入式 Google 表单无法在 Wordpress 上运行
- python - 我有一个练习题需要帮助解决
- c - C指针数组随机更改地址
- shell - 工作目录 shell 脚本的 cd 命令