lombok 注解,绝中绝,顶上顶!

lombok 注解,绝中绝,顶上顶!
可以在编译后的 class 文件来看出不同。不过有时候修改注解后,项目并不会自动编译,此时在 maven 手动编译即可看出效果。
- 本文主要记录 lombok 可能会遇到的一些坑和一些注解解释
@Data
@Data
= @Getter + @Setter + @ToString + @EqualsAndHashCode
注意
- @Data 里面没有构造函数。即如果没有写自定义的构造函数那就是 Java 自带的无参构造函数。如果有自定义的构造函数那就是只有写了的构造函数,没有无参的了
- 由上一点,所以一般如果加了 @AllArgsConstructor, 那应该加个 @NoArgsConstructor.
@EqualsAndHashCode
@EqualsAndHashCode , 该注解是按照整个对象去重写 Equals 和 HashCode. 有时候业务场景是根据 ID 去判断是否重复,所以可以使用 @EqualsAndHashCode(of = {“id”})
注意
- 没加 @EqualsAndHashCode(of = {“id”})
- 加了 @EqualsAndHashCode(of = {“id”})
@Accessors
@Accessors 有两个属性
@Accessors(chain = true)
- chain : 链
现在链式编程很酷也很方便,å
上该注解后,所有的 set 命令返回的都是 this 即调用对象本身。不加 @Accessors 默认 setXxx() 返回是 void
因此你可以像这样创建对象:
1 | Student student = new Student().setId(1).setName("lucy").setAge(18); |
@Accessors(fluent = true)
- fluent : 流利的
这个命令更牛逼,set get 都给你整没了。直接就是首字母小写的变量名。有参数的就是 set,没参数的就是 get
因此你可以像这样使用:
1 | Student student = new Student().id(1).name("lucy").age(18); |
@Builder
一种设计模式:建造者模式
注意
- @Builder 会增加全参构造函数,那他就没有默认的无参构造了,得注意。所以得加上 @NoArgsConstructor,但是加上后 @Builder 默认的全参构造就没了,会报错,所以都得加上 @NoArgsConstructor,@AllArgsConstructor.
- 并且内部类那个成员变量会覆盖掉他父类的成员变量的默认值,所以默认值会失效。
总结
之前在 OkHttps 里面看到过 builder() 这玩意,现在知道了是一种设计模式。lombok 也有用到。但是 @Builder 会更消耗内存吧,静态内部类还没用就直接整上内存里了,好处应该是更直观一点。还是推荐如果喜欢流式的就用 @Accessors(fluent = true)
, 喜欢链式编程 setXxx() 就用 @Accessors(chain = true)