java - 注解处理: how to change annotation target in Kotlin code?

标签 java kotlin annotation-processing kapt kotlinc

很多时候,当我在 Kotlin 代码中使用来自 Java 库的注释时,我必须指定目标,以便指定编译代码中的哪些元素必须被注释:

data class User(
    val id: String,

    @get:Email
    val email: String
)

我希望能够简单地使用 @Email,而不是指定 @get:Email,特别是当它出现在很多地方时。

问题:有没有办法提示 Kotlin 编译器在所有地方使用不同的目标,这样如果我使用 @Email ,它就会像处理它一样处理它@get:电子邮件?或者还有其他方法可以省略指定目标吗?如何才能实现呢?可以在编译阶段通过注释处理来完成(像 Lombok 那样)吗?

如果有任何想法,即使它们没有直接回答我的问题,我也会很感激。

最佳答案

您无法覆盖它。也许创建以 @Email 注释为目标的注释,并在尝试调用目标时提供属性 getter。

指定目标由注释目标决定。当注释的目标指定为 jvm use-targets 时那么您必须使用 @get: 来指定注释的目标是属性的 getter。

为了简单地使用@Email,您必须使用 kotlin target types对于您的注释,可能是 PROPERTY。请注意,PROPERTY 目标不适用于 Java。

@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.PROPERTY)
annotation class Email

关于java - 注解处理: how to change annotation target in Kotlin code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65347260/

相关文章:

java - 为什么 Sonar 运行器分析在 "Updating semaphore"处陷入无限循环

android - 尝试授权 Health Kit 时应用卡住

android - 改造协程 livedata 仅第一次调用

java - Gradle - 是否有可能在项目的其余部分之前编译单个 Java 类?

java - 我如何测试注释处理器生成的无 .java 源?

java - Android 上的持久 HttpURLConnections

java - 使用 Apache POI 在 Excel 中更改小数点和千位分隔符

java - Azure/qpid-proton-j-extensions maxframesize 将消息大小限制为 4KB

kotlin - 如何在kotlin中将两个整数div转换为十进制?

java - 我们可以使用注释处理从 Rest Controller 中自行生成客户端吗?如果可以的话我该如何进行?