在IDEA中使用了注解@Getter,但是發現在右側出現private field 'xxx' is never assigned警告,加上一個@Setter就可以解決了。然后,感覺真的是多此一舉,直接使用@Data就可以了。
現在對lombok中常用的幾個注解做一些說明。
1.類上加上@Data后的效果
可以發現,已經存在set與get方法了。
2.一些常用的注解
@Data : 注在類上,提供類的get、set、equals、hashCode、canEqual、toString方法
@AllArgsConstructor : 注在類上,提供類的全參構造
@NoArgsConstructor : 注在類上,提供類的無參構造
@Setter : 注在屬性上,提供 set 方法
@Getter : 注在屬性上,提供 get 方法
@EqualsAndHashCode : 注在類上,提供對應的 equals 和 hashCode 方法
@Log4j/@Slf4j : 注在類上,提供對應的 Logger 對象,變量名為 log
@AllArgsConstructor : 注在類上,提供類的全參構造
@NoArgsConstructor : 注在類上,提供類的無參構造
@Setter : 注在屬性上,提供 set 方法
@Getter : 注在屬性上,提供 get 方法
@EqualsAndHashCode : 注在類上,提供對應的 equals 和 hashCode 方法
@Log4j/@Slf4j : 注在類上,提供對應的 Logger 對象,變量名為 log
3.原理
Lombok本質上就是一個實現了“JSR 269 API”的程序。在使用javac的過程中,它產生作用的具體流程如下:
- javac對源代碼進行分析,生成了一棵抽象語法樹(AST)
- 運行過程中調用實現了“JSR 269 API”的Lombok程序
- 此時Lombok就對第一步驟得到的AST進行處理,找到@Data注解所在類對應的語法樹(AST),然后修改該語法樹(AST),增加getter和setter方法定義的相應樹節點
- javac使用修改后的抽象語法樹(AST)生成字節碼文件,即給class增加新的節點(代碼塊)