IT袋

当前位置:主页 > 经验教程 > 建站编程 >

详解Lombok的坑

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

时间:2024-03-25 20:25:01 来源:IT袋 作者:马勇
导读:详解Lombok的坑,但是有 @Builder.Default 注解的时候,是这样的: 明显是不同的处理方式。 反正,网上一搜索,加上 @Builder.Default 注解,问题就算是解决了。 但是紧接着我想

详解Lombok的坑

详解Lombok的坑

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

详解Lombok的坑

明显是不同的处理方式。

反正,网上一搜索,加上 @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 日的时候,一个老哥抛出了一个问题。

首先我们看一下提出问题的老哥给的代码:

详解Lombok的坑

就上面这个代码,如果我们这样去创建对象:

MyClass myClass = new MyClass();

按照 Java 规范来说,我们附了默认值的,调用 myClass.getEntitlements() 方法返回的肯定是一个空集合嘛。

但是,这个老哥说当 new MyClass 对象的时候,这个字段变成了 null:

相关阅读