如何在Java Record中使用@lombok.Builder.Default注解?
在Java Record中实现@Builder.Default的等效效果
Java Record的组件不允许直接赋值初始化,因此无法直接沿用@Value类里@Builder.Default + 字段赋值的写法。不过可以通过@Builder.ObtainVia注解配合静态方法实现完全相同的默认值功能,且该注解并非仅适用于toBuilder()。
可行实现代码
@Builder public record SomeClass( int id, String someString, @Builder.ObtainVia(method = "defaultSomeOtherString") String someOtherString ) { // 提供默认值的静态方法 private static String defaultSomeOtherString() { return "DefaultVal"; } }
工作原理
Lombok生成的构建器会在build()方法中判断:如果未显式设置someOtherString参数,就会调用我们定义的静态方法获取默认值,和@Builder.Default的逻辑完全一致。
扩展说明
该方案同样兼容toBuilder():当通过toBuilder()基于已有实例创建新实例时,未显式修改的字段会保留原实例的值,若原实例使用的是默认值,也会正常继承。
内容的提问来源于stack exchange,提问作者Rik Schaaf
相关产品推荐
相关产品推荐

