通常,当我在kotlin代码中使用java库中的注解时,我必须指定target以指定编译代码中必须注解的元素:
data class User(
val id: String,
@get:Email
val email: String
)
而不是指定 @get:Email
,我希望能够简单地使用 @Email
尤其是在很多地方。
问:有没有一种方法可以提示kotlin编译器在所有地方使用不同的目标,这样如果我使用 @Email
它会像以前一样处理它 @get:Email
? 或者有没有其他方法可以省略指定目标?如何实现?是否可以在编译阶段通过注解处理完成(就像lombok那样)?
我会很感激任何想法,即使他们不直接回答我的问题。
2条答案
按热度按时间p3rjfoxz1#
你不能覆盖它。也许可以创建一个注解
@Email
注解,并在尝试调用target时提供属性getter。指定目标由注解目标指定。当注解的目标被指定为jvm use targets时,您必须使用
@get:
指定注解以属性的getter为目标。为了简单的使用
@Email
您必须为注解使用kotlin目标类型PROPERTY
. 注意,PROPERTY
target不能与java一起工作。58wvjzkj2#
它应该可以与kotlin编译器插件api。这是一个复杂的方法,tho。
要实现这一点,您需要添加一个带有访问者处理的classbuilder拦截器
@Email
注解并指定正确的目标。如果访问者足够或者您还需要修改某个编译器阶段的源代码,请检查treevisitor。