随笔 - 42  文章 - 0  评论 - 1  阅读 - 6939

Kotlin反射从父类获取子类成员属性

背景

有部分需求需要反射获取相关信息,例如,由于子类太多100+,需要在父类写toString方法涵盖子类的相关信息

实现过程

  1. 逻辑通过反射获取子类构造方法的参数
  2. 通过当前实例调用参数的获取方法,获取参数值
  3. 在父类的toString中输出和组建toString

代码

  1. 获取构造方法的参数
val pc = this::class.primaryConstructor
  1. 获取参数值
val props = this::class.memberProperties
  1. 组建数据
var childs: List<String> = emptyList()
        if(pc != null){
            childs = pc.parameters.map { pa -> props.find { it.name == pa.name }?.getter?.call(this).toString() }
        }
        return "A(${childs.joinToString()})"
  1. 全部代码
open class A {
    override fun toString(): String {
        val pc = this::class.primaryConstructor
        val props = this::class.memberProperties
        var childs: List<String> = emptyList()
        if(pc != null){
            childs = pc.parameters.map { pa -> props.find { it.name == pa.name }?.getter?.call(this).toString() }
        }
        return "A(${childs.joinToString()})"
    }
}
class B(val a: String, val b: String) : A()

fun main() {
    println(B("aaa", "bbb").toString())
}
posted on   流浪的夜空  阅读(189)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示