我想检测JVM类是否是Kotlin类

时间:2016-10-01 12:42:43

标签: reflection kotlin

如果遇到Kotlin类而不是通用Java类,我想要做特殊功能。如何检测它是否是Kotlin类?

我希望如果班级不是Kotlin,调用someClass.kotlin会抛出异常或失败。但它包装Java类就好了。然后我注意到,如果我someClass.kotlin.primaryConstructor所有java类似乎都是null,即使它们有一个默认的构造函数,那么它是一个好的标记吗?但是,对于Kotlin类,它还可以返回null吗?

最好的说法是什么?#34;这是Kotlin课程吗?"

1 个答案:

答案 0 :(得分:14)

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

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

可以用作:

someClass.isKotlinClass()

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