lombok的几个基本注解

mac2024-05-18  51

1.@data

@Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集

2.@EqualsAndHashCode

通过官方文档,可以得知,当使用@Data注解时,则有了@EqualsAndHashCode注解,那么就会在此类中存在equals(Object other) 和 hashCode()方法,且不会使用父类的属性,这就导致了可能的问题。 比如,有多个类有相同的部分属性,把它们定义到父类中,恰好id(数据库主键)也在父类中,那么就会存在部分对象在比较时,它们并不相等,却因为lombok自动生成的equals(Object other) 和 hashCode()方法判定为相等,从而导致出错。 解决:在使用@Data时同时加上@EqualsAndHashCode(callSuper=true)注解,这样就会将父类的属性也带上一起比较

3.@Accessors

有三个属性fluent,chain和prefix。

3.1 fluent的中文含义是流畅的,设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法返回当前对象。如下

@Data @Accessors(fluent = true) public class User { private Long id; private String name; // 生成的getter和setter方法如下,方法体略 public Long id() {} public User id(Long id) {} public String name() {} public User name(String name) {} }

3.2 chain的中文含义是链式的,设置为true,则setter方法返回当前对象。如下

@Data @Accessors(chain = true) public class User { private Long id; private String name; // 生成的setter方法如下,方法体略 public User setId(Long id) {} public User setName(String name) {} }

好处就是可以链式调用,如new User().setId(1L).setName(“sss”);

3.3prefix的中文含义是前缀,用于生成getter和setter方法的字段名会忽视指定前缀(遵守驼峰命名)。如下

@Data @Accessors(prefix = "p") class User { private Long pId; private String pName; // 生成的getter和setter方法如下,方法体略 public Long getId() {} public void setId(Long id) {} public String getName() {} public void setName(String name) {} }
最新回复(0)