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

@NoArgsConstructor,这是个啥东西?
这不就是让 lombok 给我们搞一个无参构造函数吗?
搞无参构造函数的时候,不是得针对有默认值的字段,进行一波默认值的初始化吗?
这个算一次了。
前面我们分析了 @Builder.Default 也要对有默认值的字段初始化一次。
所以是 twice,而且这两次干得都是同一个活。
开发者一看,这不行啊,得优化啊。
于是把 @NoArgsConstructor 的初始化延迟到了 @Builder.Default 里面去,让两次合并为一次了。
这样一看,用 Builder 模式的时候确实没问题了,但是用 new 的时候,默认值就没了。
这是一种经典的顾头不顾尾的解决问题的方式。
作者可能也没想到,大家在使用的时候会把 @Builder 和 @NoArgsConstructor 两个注解放在一起用。
作者可能还觉得委屈呢:这明明就是两种不同的对象构建方式啊,二选一就行了,你要放在一起?哎哟,你干嘛~
接着一个叫做 davidje13 的老哥接过了话茬,顺着 omega09 老哥的话往下说,他除了解释两个注解放在一起使用的场景外,还提到了一个词:least-surprise。

least-surprise,是一个软件设计方面的词汇,翻译过来就是最小惊吓原则。
简单来说就是我们的程序所表现出的行为,应该尽量满足在其领域内具有一致性、显而易见、可预测、遵循惯例。
比如我们认为的惯例是 new 对象的时候,如果有默认值会附上默认值。
结果你这个就搞没了,就不遵循惯例了。
当然,你还是可以拿出那句万金油的话:一切解释权归官方所有,你要用,就得遵守我制定的规范。我的规范就是不让你们混用。
这就是纯纯的耍无赖了,相当于是做了一个违背祖宗的决定。
然而这个问题似乎并没有官方人员参与讨论,直到这个时候,2018 年 3 月 27 日:

rspiller 就是官方人员,他说:我们正在调查此事。
此时,距离这个问题提出的时间已经过去了一年。
我是比较吃惊的,因为我认为这是一个比较严重的 BUG 了,程序员在使用的时候会遇到一些就类似于我认为这个字段一定是有默认值的,但是实际上却变成了 null 这种莫名其妙的问题。
在官方人员介入之后,这个问题再次活跃起来。
一位 xak2000 老哥也发表了自己的看法,并艾特了官方人员:
相关阅读
-
DNS服务器未响应怎么解决? DNS未响应最简单的修复办法
今天小编介绍DNS服务器未响应怎么解决的电脑方面的小经验,接下来IT袋网带大家一起了解。 DNS服务器未响应是一种常见的网络问题,可能导致无法访问网站或网络服务。 DNS(域名系统)负责
-
Nacos核心功能点有哪些 "Nacos的关键功能有哪些?"
本文为您带来的是Nacos核心功能点有哪些的内容,接下来小编为网友介绍。 服务注册: Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等
-
Kafka为什么这么快? 为何卡夫卡如此迅猛?
如果想了解Kafka为什么这么快方面的知识,具体详情如下: 深入地从 IO、线程、数据结构、编码等方面剖析了Redis “快”的内部秘密。 下面不念讲一讲Kafka性能优化方面的知识,不念决定将这
-
怎么注册自己的网站域名账号 申请域名网址的流程
一篇很详细的教程是关于怎么注册自己的网站域名账号和申请域名网址的流程的IT知识,下面为详细的介绍。 注册域名的一般流程是什么?个人申请域名流程需要知道哪些? 一、域名注册流程


