我需要知道Java类的注释。我正在使用龙目岛。
示例为:
@Data
@Builder
public class JavaBean {}
我尝试了java.lang.annotation.Annotation []注记= JavaBean.class.getAnnotations,但是它不显示数据和生成器。
答案 0 :(得分:3)
我认为您无法在JavaBean.class.getAnnotations中看到批注,因为@Retention等于SOURCE。
在运行时不需要这种注释。
有关更多详细信息:Annotation SOURCE Retention Policy
祝你有美好的一天。
答案 1 :(得分:2)
答案来自这些注释:
@Target({TYPE, METHOD, CONSTRUCTOR})
@Retention(SOURCE)
public @interface Builder {
.....
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Data {
.....
您获取批注的代码是正确的,但是@Retention(RetentionPolicy.SOURCE)
在这里发挥了作用。
Java通过java.lang.annotation.RetentionPolicy
枚举定义了3种保留策略。它具有SOURCE
,CLASS
和RUNTIME
。
1)具有保留策略SOURCE
的注释将仅与源代码一起保留,并在编译时丢弃。
2)具有保留策略CLASS
的注释将一直保留到编译代码为止,并在运行时被丢弃。
3)带有保留策略RUNTIME
的注释将在运行时提供给JVM。
@Data
和@Builder
用@Retention(SOURCE)
标记,这意味着这些注释在您的类在运行时不存在,因此您无法获得这些注释。
答案 2 :(得分:1)
Lombok批注在实际编译之前已进行了预处理,因此编译后的类不包含它们作为批注,而是包含已生成的代码。