如何迭代类层次结构?
我想遍历类层次结构并打印所有的超类:
open class A {} open class B : A() {} open class C : B() {} fun main(args: Array<String>) { var currentClass = C::class while(currentClass != Any::class) { println(currentClass) currentClass = currentClass.superclass } }
但Kotlin KClass
没有superclass
方法。
我曾尝试使用Java的superclass
:
currentClass = currentClass.java.superclass.kotlin
但是会导致编译错误:
Error:(9, 52) Type inference failed: 'T' cannot capture 'in ('C'..'C?')'. Type parameter has an upper bound 'kotlin.Any' that cannot be satisfied capturing 'in' projection
那么,有人可以解释我该怎么做吗?
首先,为var currentClass
指定显式类型,以避免将其推断为KClass<C>
:
var currentClass: KClass<*> = C::class
然后, superclass
调用将返回一个类型in
投影 ,你将无法调用它的.kotlin
。 所以一个演员星星投射式也将有助于:
currentClass = (currentClass.java.superclass as Class<*>).kotlin
完整的方法:
fun main(args: Array<String>) { var currentClass: KClass<*> = C::class while (currentClass != Any::class) { println(currentClass) currentClass = (currentClass.java.superclass as Class<*>).kotlin } }
- 由于重复,Kotlin gradle.build ZipException
- Gradle kotlin不支持的方法Dependencies.getAtoms()
- 在Kotlin中的功能循环中,如何做“休息”或“继续”?
- Kotlin:子类如何在超级构造函数调用中使用父级的扩展函数?
- 在kotlin中尝试makeSceneTransitionAnimation
- Kotlin脚本无法从jar中访问META-INF资源(persistence.xml)
- rxAndroidBle获得长时间的写入响应
- 如何在Kotlin anko中使用TextInputLayout和TextInputEditText
- Kotlin:如何在类中使用多个Generic?