详解Lombok的坑 Lombok使用中需注意的问题(2)
详解Lombok的坑

但是有 @Builder.Default 注解的时候,是这样的:

明显是不同的处理方式。
反正,网上一搜索,加上 @Builder.Default 注解,问题就算是解决了。
但是紧接着我想到了另外一个问题:为什么?
为什么我明明给了默认值,@Builder 不使用,非得给再显示的标记一下呢?
于是我带着这个问题在网上冲了一大圈,不说没有找到权威的回答了,甚至没有找到来自“民间”的回答。
所以我也只能个人猜测一下,我觉得可能是 Lombok 觉得这样的赋默认值的写法是 Java 语言的规范:
private Boolean field1 = true;
规范我 Lombok 肯定遵守,但是我怎么知道你这个字段有没有默认值呢?
我肯定是有手段去检查的,但是我必须要每个字段都盲目的去瞅一眼,这个方案对我不友好啊。
这样,我给使用者定一个规范:你给我打个标,主动告诉我那些字段是有默认值的。对于打了标的字段,我才去解析对应的默认值,否则我就不管了。
如果你直接 new 对象,那是 Java 的规范,我管不了。
但是如果你使用 Builder 模式,你就得遵守我的规范。不然出了问题也别赖我,谁叫你不准守我的规范。
打个标,就是 @Builder.Default。
必须要强调的是,这个观点是歪师傅纯粹的个人想法,不保真。如果你有其他的看法也可以提出来一起交流,学习一波。
吃个瓜
虽然我没有找到关于 @Builder.Default 注解存在的意义的官方说明,但是我在 github 上找到了这个一个链接:
https://github.com/projectlombok/lombok/issues/1347
里面的讨论的问题和我们这个注解有点关系,而且我认为这是一个非常明确的 bug,但是官方却当做 feature 给处理了。
简单的一起吃个瓜。
2017 年 3 月 29 日的时候,一个老哥抛出了一个问题。
首先我们看一下提出问题的老哥给的代码:

就上面这个代码,如果我们这样去创建对象:
MyClass myClass = new MyClass();
按照 Java 规范来说,我们附了默认值的,调用 myClass.getEntitlements() 方法返回的肯定是一个空集合嘛。
但是,这个老哥说当 new MyClass 对象的时候,这个字段变成了 null:
相关阅读
-
DNS服务器未响应怎么解决? DNS未响应最简单的修复办法
今天小编介绍DNS服务器未响应怎么解决的电脑方面的小经验,接下来IT袋网带大家一起了解。 DNS服务器未响应是一种常见的网络问题,可能导致无法访问网站或网络服务。 DNS(域名系统)负责
-
Nacos核心功能点有哪些 "Nacos的关键功能有哪些?"
本文为您带来的是Nacos核心功能点有哪些的内容,接下来小编为网友介绍。 服务注册: Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等
-
Kafka为什么这么快? 为何卡夫卡如此迅猛?
如果想了解Kafka为什么这么快方面的知识,具体详情如下: 深入地从 IO、线程、数据结构、编码等方面剖析了Redis “快”的内部秘密。 下面不念讲一讲Kafka性能优化方面的知识,不念决定将这
-
怎么注册自己的网站域名账号 申请域名网址的流程
一篇很详细的教程是关于怎么注册自己的网站域名账号和申请域名网址的流程的IT知识,下面为详细的介绍。 注册域名的一般流程是什么?个人申请域名流程需要知道哪些? 一、域名注册流程


