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

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

可以在编译后的 class 文件来看出不同。不过有时候修改注解后,项目并不会自动编译,此时在 maven 手动编译即可看出效果。

image

  • 本文主要记录 lombok 可能会遇到的一些坑和一些注解解释

@Data

@Data

= @Getter + @Setter + @ToString + @EqualsAndHashCode

注意

  • @Data 里面没有构造函数。即如果没有写自定义的构造函数那就是 Java 自带的无参构造函数。如果有自定义的构造函数那就是只有写了的构造函数,没有无参的了
  • 由上一点,所以一般如果加了 @AllArgsConstructor, 那应该加个 @NoArgsConstructor.

@EqualsAndHashCode

@EqualsAndHashCode , 该注解是按照整个对象去重写 Equals 和 HashCode. 有时候业务场景是根据 ID 去判断是否重复,所以可以使用 @EqualsAndHashCode(of = {“id”})

注意

  • 没加 @EqualsAndHashCode(of = {“id”})
    image
  • 加了 @EqualsAndHashCode(of = {“id”})
    image

@Accessors

@Accessors 有两个属性

@Accessors(chain = true)

  • chain : 链

现在链式编程很酷也很方便,å
 上该注解后,所有的 set 命令返回的都是 this 即调用对象本身。不加 @Accessors 默认 setXxx() 返回是 void

image

因此你可以像这样创建对象:

1
Student student = new Student().setId(1).setName("lucy").setAge(18);

@Accessors(fluent = true)

  • fluent : 流利的

这个命令更牛逼,set get 都给你整没了。直接就是首字母小写的变量名。有参数的就是 set,没参数的就是 get

image
因此你可以像这样使用:

1
2
Student student = new Student().id(1).name("lucy").age(18);
System.out.println(student.id() + student.name() + student.age());

@Builder

一种设计模式:建造者模式

注意

  • @Builder 会增加全参构造函数,那他就没有默认的无参构造了,得注意。所以得加上 @NoArgsConstructor,但是加上后 @Builder 默认的全参构造就没了,会报错,所以都得加上 @NoArgsConstructor,@AllArgsConstructor.
  • 并且内部类那个成员变量会覆盖掉他父类的成员变量的默认值,所以默认值会失效。
    image

总结

之前在 OkHttps 里面看到过 builder() 这玩意,现在知道了是一种设计模式。lombok 也有用到。但是 @Builder 会更消耗内存吧,静态内部类还没用就直接整上内存里了,好处应该是更直观一点。还是推荐如果喜欢流式的就用 @Accessors(fluent = true) , 喜欢链式编程 setXxx() 就用 @Accessors(chain = true)

由 Hexo 驱动 & 主题 Keep
访客数 访问量