如何获取Kotlin中密封类的成员数量?
获取Kotlin密封类的成员数量
当然有办法啦!针对你给出的Foo密封类,我们可以利用Kotlin的反射API轻松拿到它的直接成员数量。
核心方法:使用sealedSubclasses属性
Kotlin的密封类反射提供了sealedSubclasses属性,它会返回所有直接继承该密封类的子类集合。我们只需要取这个集合的size就能得到成员数量。
比如针对你的示例代码:
sealed class Foo { object Bar : Foo() data class Baz(val m: String) : Foo() } fun main() { // 获取直接子类数量 val memberCount = Foo::class.sealedSubclasses.size println(memberCount) // 输出:2 }
注意事项
- 这个方法统计的是直接子类:如果你的密封类有间接子类(比如
Baz再派生出一个子类),sealedSubclasses不会包含这类间接子类。不过通常我们说密封类的"成员"指的就是这些直接定义的子类,所以这个方法完全满足你的需求。 - 反射依赖:如果是JVM项目,需要在构建脚本中添加
kotlin-reflect依赖才能使用这个API。比如在Gradle中:implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
如果你的场景需要统计所有可能的子类(包括间接的),可以基于sealedSubclasses做递归遍历,但这种情况在实际开发中比较少见。
内容的提问来源于stack exchange,提问作者tse
相关产品推荐
相关产品推荐

