如何使用KClass反射来区分Kotlin中的类和接口

时间:2018-02-01 17:12:52

标签: reflection kotlin

我正在使用Kotlins KClass按名称查找类:

val i: KClass<*> = Class.forName("SampleClass").kotlin

但是,我想省略接口。到目前为止,我通过构造函数区分接口和类。

val i: KClass<*> = Class.forName(input).kotlin

if (i.constructors.isEmpty()){
    println("This is an interface")
}else{
    println("This is a class")
}

我认为它不是很干净。

我正在寻找一些东西
i.isInterface

这样的事情是否存在?

1 个答案:

答案 0 :(得分:5)

请注意,计算解决方案的构造函数可能不是非常精确用于通用目的。例如,Kotlin包外观类也没有任何构造函数,但它们不是接口(UPD:它们的构造函数甚至不能用kotlin-reflect反映,就像匿名类KFunction那样更多)。

kotlin-reflect中没有允许直接检查的功能/属性。在JVM上,您可以将其作为i.java.isInterface或进行扩展:

val KClass<*>.isInterface get() = java.isInterface