一、作用
1. 此注解会生成equals(Object other) 和 hashCode()方法。
2. 它默认使用非静态,非瞬态的属性
3. 可通过参数exclude排除一些属性
4. 可通过参数of指定仅使用哪些属性
5. 它默认仅使用该类中定义的属性且不调用父类的方法
6. 可通过callSuper=true解决上一点问题。让其生成的方法中调用父类的方法。
1.@Data注解
@Data注解相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。
2.示例
1.创建一个基类 user
@Data
public class user {
private int id;
private String username;
private String password;
private boolean teach;
}
2.创建一个people类继承user
@Data
//@EqualsAndHashCode(callSuper = true)
public class people extends user{
private String color;
}
3.写一个test类
public class Test {
public static void main(String[] args) throws JsonProcessingException {
people peo1=new people();
peo1.setColor("绿色");
peo1.setId(1001);
people peo2=new people();
peo2.setColor("绿色");
peo2.setId(1002);
System.out.println(peo1.equals(peo2));
}
}
返回结果为true
如果我们不加
@EqualsAndHashCode(callSuper = true)注解的话,其实@Data注解中已经包含了@EqualsAndHashCode 并且默认值为false,这种情况下比较两个people类只会比较子类中字段的内容,即使我们分别设置的父类属性不同也不会去比较
4.加上@EqualsAndHashCode注解并设置callSuper=true
此时既会比较子类中的字段,也会比较父类中的字段,此时的结果为false