如果遇到Kotlin类而不是通用Java类,我想要做特殊功能。如何检测它是否是Kotlin类?
我希望如果班级不是Kotlin,调用someClass.kotlin
会抛出异常或失败。但它包装Java类就好了。然后我注意到,如果我someClass.kotlin.primaryConstructor
所有java类似乎都是null
,即使它们有一个默认的构造函数,那么它是一个好的标记吗?但是,对于Kotlin类,它还可以返回null
吗?
最好的说法是什么?#34;这是Kotlin课程吗?"
答案 0 :(得分:14)
Kotlin为其所有类添加了注释,您可以通过名称安全地检查其存在。这是一个实现细节,可能会随着时间的推移而改变,但是一些关键库使用这个注释,因此它可能无限期地存在。
fun Class<*>.isKotlinClass(): Boolean {
return this.declaredAnnotations.any {
it.annotationClass.qualifiedName == "kotlin.Metadata"
}
}
可以用作:
someClass.isKotlinClass()
不会直接访问类kotlin.Metadata
,因为它在Kotlin运行时标记为internal
。