gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:34:03 25 4
gpt4 key购买 nike

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

如果类不是 Kotlin,我希望调用 someClass.kotlin 会引发异常或失败。但它很好地包装了 Java 类。然后我注意到,如果我执行 someClass.kotlin.primaryConstructor 它似乎是所有 java 类的 null 即使它们有一个默认构造函数,这是一个好的标记吗?但是对于 Kotlin 类也可以返回 null 吗?

说“这是一个 Kotlin 类吗?”的最佳方式是什么?

最佳答案

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

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

可以用作:

someClass.isKotlinClass()

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

关于reflection - 我想检测一个 JVM 类是否是 Kotlin 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39806721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com