我正在使用Kotlins KClass按名称查找类,如下所示:
val i: KClass<*> = Class.forName("SampleClass").kotlin
Run Code Online (Sandbox Code Playgroud)
但是,我想省略接口.到目前为止,我通过构造函数区分接口和类.
val i: KClass<*> = Class.forName(input).kotlin
if (i.constructors.isEmpty()){
println("This is an interface")
}else{
println("This is a class")
}
Run Code Online (Sandbox Code Playgroud)
我不认为它很干净.我正在寻找一些类似的东西
i.isInterface
Run Code Online (Sandbox Code Playgroud)
这样的事情存在吗?
请注意,计算解决方案的构造函数可能不是非常精确用于通用目的.例如,Kotlin包外观类也没有任何构造函数,但它们不是接口(UPD:它们的构造函数甚至不能kotlin-reflect像匿名类那样反映,KFunction也许更多).
没有功能/属性kotlin-reflect允许直接检查.在JVM上,您可以将其作为i.java.isInterface扩展名或进行扩展:
val KClass<*>.isInterface get() = java.isInterface
Run Code Online (Sandbox Code Playgroud)