一、@Builder與@NoArgsConstructor一起使用存在的問題
1 @Data 2 @Builder 3 @NoArgsConstructor 4 public class User { 5 private Long skuId; 6 }
編譯上述代碼為拋出如下異常:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project java_base: Compilation failure [ERROR] /Users/zhangboqing/Software/MyGithub/java_knowledge_sea/java_base/src/main/java/com/zbq/devPlugin/lombok/bean/User.java:[12,1] 無法將類 com.zbq.devPlugin.lombok.bean.User中的構造器 User應用到給定類型; [ERROR] 需要: 沒有參數 [ERROR] 找到: java.lang.Long,java.lang.String,boolean,java.lang.Boolean,int [ERROR] 原因: 實際參數列表和形式參數列表長度不同
二、原因分析
當java bean 中使用@Builder的時,無法添加無參構造器。我覺得可能的原因是,既然使用@Builder了,創建對象,可以通過builder去創建,而不需要new對象,為了防止new 對象而禁止無參構造器的存在(嘻嘻,這只是我的猜測哈)
三、如何解決
1.去掉無參構造器
這樣就可以編譯通過了
2.既然只是編譯階段有問題,那么我們可以通過@Tolerate 注解,讓編譯器不編譯該方法就可以了
1 @Data 2 @Builder 3 public class User { 4 @Tolerate 5 public User() { 6 } 7 8 private Long skuId; 9 }