Kotlin密封等级的成员数量

时间:2018-04-25 11:53:24

标签: kotlin

有没有办法在Kotlin获得sealed class的成员数量? 例如,对于这个类,它将是2:

sealed class Foo {
    object Bar : Foo()
    data class Baz(val m: String) : Foo()
}

2 个答案:

答案 0 :(得分:2)

您可以使用kotlin反射api的KClass.nestedClasses。这将返回给定类中声明的所有类(例如,也会列出伴随对象)。

fun countSubclasses(clazz: KClass<*>): Int =
        clazz.nestedClasses.filter {
            it.isSubclassOf(clazz)
        }.size

要调用此功能,请使用

countSubClasses(Foo::class)

有关详细信息,请参阅kotlin reflection reference

答案 1 :(得分:0)

nestedClasses的{​​{1}}属性应该没问题:

KClass