Lombok的大坑!!@Data重寫的toString特性


@Data注解中有默認toString方法的重寫。

並且Lombok的toString方法在展示數據時默認調用的是Getr方法,如果有邏輯需要在Get取值時進行計算,並且此值在創建對象以后為null值就會出現問題。

如果單獨使用@ToString注解則可以規避這個坑。同時使用Data和ToString注解時ToString的權重更高。

@ToString

可選元素

修飾符和類型 可選元素 描述
boolean callSuper toString在輸出中包含超類實現的結果。
boolean doNotUseGetters 通常情況下,如果 getters是可用的,那么被調用。
java.lang.String[] exclude 這里列出的任何字段將不會被打印在生成的toString實現中。
boolean includeFieldNames 在打印時包括每個字段的名稱。
java.lang.String[] of 如果存在,明確列出要打印的字段。
發現這個問題是因為特殊需求需要在get方法取值時進行計算。
舉個例子
@ToString(doNotUseGetters=false)
@AllArgsConstructor
@NoArgsConstructor
public class LombokBean {
private String name; 
private Integer age;

public Integer getAge() { test001(); return age; }

private void test001(){ System.out.println("測試"); System.out.println(age > 0); } }
//測試lombok
@Test public void test7(){ LombokBean lombokBean = new LombokBean();
System.out.println(lombokBean); }

 

 原因就是默認Integer為null,使用了null進行了邏輯計算。

而這一個問題的產生反而是toString在展示數據時使用的Get取值。

@ToString(doNotUseGetters=false) 是默認調用Get取值的意思。
改成true則可以避免此問題出現,會直接取實體中屬性的值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM