lombok使用时一些注意事项

lombok使用时一些注意事项

** lombok常用注解:**
@Data: 自动生成get,set,toString,equals,HashCode方法
@AllArgsConstructor: 有参构造
@NoArgsConstructor: 无参构造
@EqualsAndHashCode(callSuper = true) :在生成equals,HashCode方法时,把继承的父类成员变量也包含在内, 在子类中使用
@ToString(callSuper = true): 在生成toString方法时,把把继承的父类成员变量也包含在内,在子类中使用
@Builder: 在没有继承的父类时生效,
@SuperBuilder:在继承父类时,父类和子类同时使用,才会生效

举例说明
首先创建2个类(Student, Person)

@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class Student extends Person{
    private String name;
    private int age;
}

@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    private String sex;

}

在使用@SuperBuilder和@Builder后,我们在创建对象时会更加简明, 告别setter方法
@Builder:构造对象时只有本类的成员变量,没有父类的成员变量

Student student = Student.builder().name("杨幂").age(22).build();

@SuperBuilder: 构造对象时本类的成员变量和父类的成员变量都包含; 注意:子类和父类同时加@SuperBuilder才会生效

Student student = Student.builder().sex("女").name("杨幂").age(22).build();

在继承父类时, 子类上必须使用:
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
否则生成Equals();HashCode():ToString只有该类的成员变量; 不包含父类的成员变量

子类未使用@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Student)) return false;
        if (!super.equals(o)) return false;
        Student student = (Student) o;
        return getAge() == student.getAge() &&
                Objects.equals(getName(), student.getName());
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), getName(), getAge());
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

子类使用@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Student)) return false;
        if (!super.equals(o)) return false;
        Student student = (Student) o;
        return getAge() == student.getAge() &&
                getName().equals(student.getName())&&getSex().equals(student.getSex());
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), getName(), getAge());
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                "sex='" + getSex() + '\'' +
                ", age=" + age +
                '}';
    }

在继承父类时推荐子类上使用的注解:
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值