JAVA pojo类常加的注解@Accessors(chain = true)注解的作用

@Accessors

在Java中,@Accessors注解的chain属性用来生成链式调用的setter方法。它可写在类上,也可写在属性上。写在类上,则类里所有属性均可链式赋值。

public class User {
 
  @Accessors(chain = true)  
  private Long id;
 
  @Accessors(chain = true)
  private String name;
 
  // getter和setter
}

如果没有@Accessors(chain = true),我们平时new一个对象时,通常需要这样去写:

User user = new User();
user.setId(1L);
user.setName("张三");

加上@Accessors(chain = true)注解后,setter方法会返回当前对象,所以可以链式调用:

User user = new User()
       .setId(1L)
       .setName("张三"); 

这让setter的调用更流畅,代码更简洁。@Accessors来自Lombok库,它通过注解自动生成setter/getter、toString等方法。chain = true就是开启链式调用的功能。

所以,@Accessors(chain = true)的作用是生成链式调用的setter方法,使代码更简洁。它需要结合Lombok库使用。

@EqualsAndHashCode

当我们的pojo使用@Data注解时,@Data默认包含的是:@EqualsAndHashCode(callSuper = false),但是我们的pojo有继承父类,我们可能需要重新定义这个注解为:@EqualsAndHashCode(callSuper = true)

两者区别: @EqualsAndHashCode(callSuper = false):当我们用于对象属性比较的时候:只比较子类的属性,也就是讲:如果两个对象子类属性一致,父类属性不一致,在比较时候出现相同的结果,也就是返回的true。

@EqualsAndHashCode(callSuper = true):如果加了这个注解,则相反,进行对象属性比较时,子类和父类一同进行比较,也就是:如果两个对象子类属性一致,父类不一致,返回的是false;只有子类和继承类的属性都一致时,才会返回true;

@Data这个不用说了吧,用于生成get/set方法。
 

你可能感兴趣的:(java,开发语言)