You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过KType获取Kotlin嵌套数据类的相对类名

问题说明

现有如下Kotlin数据类定义:

data class MyClass(
  val inner: MyInnerClass
) {
  data class MyInnerClass(
    val foo: String
  )
}

需要获取MyClass.MyInnerClass格式的嵌套类相对类名。目前已经拿到对应类的KType实例,在IntelliJ调试器中可以直接观察到这个名称(调试截图:IntelliJ调试器界面截图),但未找到公开API可以直接通过代码拿到该值。

实现方法

调试器中显示的嵌套类相对名是Kotlin调试插件内部渲染的结果,没有对外暴露直接获取的公开API,可以通过KType拿到对应KClass后,逐层向上遍历外部封闭类拼接得到目标名称,实现代码如下:

import kotlin.reflect.KClass
import kotlin.reflect.KType

fun KType.getNestedRelativeName(): String {
    val targetClass = classifier as? KClass<*> 
        ?: throw IllegalArgumentException("当前KType不对应类类型")
    // 从当前类逐层向上查找外部类,直到顶级类
    return generateSequence(targetClass) { current ->
        if (current.isNested && !current.isCompanion) {
            current.java.enclosingClass?.kotlin
        } else null
    }
    .toList()
    .reversed() // 反转后从外层到内层排序
    .joinToString(".") { it.simpleName.orEmpty() }
}

调用该扩展方法即可得到MyClass.MyInnerClass格式的相对类名,支持任意层级的嵌套类场景,同时会自动跳过伴生对象层级,避免拼接出多余的伴生对象段。

内容的提问来源于stack exchange,提问作者deflomu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 04:03:36