gpt4 book ai didi

java - kotlin注解处理: check if given TypeElement is from kotlin-class

转载 作者:行者123 更新时间:2023-11-29 08:31:24 25 4
gpt4 key购买 nike

我正在实现注释处理库,该库使用基于具有特定注释的类的 Java Poetr 生成代码。

为了也使用 kotlin 编写的类,我在示例项目中切换到 kapt 而不是 apt。它与带注释的 java 类一起工作得很好。 Bun kotlin-classes 有不同的方法来访问类字段:应该使用 getter 和 setter。

有没有办法确定给定的类(更具体地说 - 不是一个类,而是一个 TypeElement - 因为这是在编译之前发生的)是 java 类还是用 kotlin 编写的?基于此,我可以编写生成字段访问或 getters 使用的访问的代码。

最佳答案

理论上,任何从 kotlin 编译的类都会用 kotlin.Metadata 进行注释。您可以使用 TypeElement 上的 getAnnotation 方法来检查该注释是否存在,以验证它们是否是用 kotlin 编写的。

val metaDataClass = Class.forName("kotlin.Metadata").asSubclass(Annotation::class.java)
val isKotlinClass = <TypeElement>.getAnnotation(metaDataClass) != null

在处理环境中无需 kotlin 标准库即可工作的版本:

elementUtils.getAllAnnotationMirrors(typeElement).any { 
elementUtils.getBinaryName(it.annotationType).contentEquals("kotlin.Metadata")
}

关于java - kotlin注解处理: check if given TypeElement is from kotlin-class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47873480/

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