@Builder.Default 未生效
2026/5/6 17:18:22 网站建设 项目流程

一、问题代码

import lombok.Builder; import lombok.Data; @Data @Builder public class User { private String name = "未知用户"; private Integer age; public static void main(String[] args) { // 通过Builder创建对象,未指定name User user = User.builder().age(28).build(); System.out.println(user.getName()); // 输出:null(预期:未知用户) } }

二、根源分析:@Builder.Default 的作用机制

要解决生效问题,需先明确@Builder.Default的核心设计逻辑:
@Builder的本质:Lombok 的@Builder会为实体类生成一个内部Builder类,通过Builder的setter方法赋值属性,最终调用build()方法创建目标对象。
若仅在属性上直接赋值,该赋值逻辑仅在通过new User()创建对象时生效,不会自动同步到 Builder 类中。

三、解决方案:正确使用 @Builder.Default

import lombok.Builder; import lombok.Data; @Data @Builder public class User { // 正确用法:@Builder.Default直接标注在属性上,赋值语句紧跟 @Builder.Default private String name = "未知用户"; // 该默认值会同步到Builder private Integer age; public static void main(String[] args) { User user = User.builder().age(28).build(); System.out.println(user.getName()); // 输出:未知用户(生效!) // 显式设置name时,会覆盖默认值 User user2 = User.builder().name("张三").age(30).build(); System.out.println(user2.getName()); // 输出:张三 } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询