我想检测一个JVM类是否是一个Kotlin类

如果我遇到一个Kotlin类,与一般的Java类相比,我想要做特殊的功能。 我如何检测它是否是Kotlin类?

我希望调用someClass.kotlin会抛出异常,否则如果类不是Kotlin。 但它包装Java类就好了。 然后我注意到,如果我做一些someClass.kotlin.primaryConstructor它似乎是null的所有Java类,即使他们有一个默认的构造函数,是一个好的标记? 但是,Kotlin类也可以返回null吗?

什么是最好的方式来说“这是一个科特林级?”

Kotlin为所有的类增加了一个注释,并且可以通过名字安全地检查它的存在。 这是一个实现细节,可能会随着时间的推移而改变,但是一些关键的库使用这个注释,所以它可能无限期地运行。

 fun Class<*>.isKotlinClass(): Boolean { return this.declaredAnnotations.any { it.annotationClass.qualifiedName == "kotlin.Metadata" } } 

可以用作:

 someClass.isKotlinClass() 

kotlin.Metadata类不直接访问,因为它在Kotlin运行时标记为internal