Lombok注解

504 阅读1分钟

maven

<!--lombok依赖-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

常见注解

@Data
  • 包含Getter/@Setter,@ToString,@EqualsAndHashCode,@RequiredArgsConstructor。
@EqualsAndHashCode
  • 生成equals(Object other) 和 hashCode();
  • 默认仅使用该类中定义的属性且不调用父类的方法;
  • 造成问题:如下代码————
@Data
public class Animal {
    private int id;
}

@Data
//@EqualsAndHashCode(callSuper=true)
public class Dog extends Animal{
    private String name;
}

/*
 * @Author afuo
 * @Description //id取自animal父类。
 **/
public static void main(String[] args) {
    Dog dog1 = new Dog();
    dog1.setId(1);
    dog1.setName("wangcai");

    Dog dog2 = new Dog();
    dog2.setId(1);
    dog2.setName("wangcai");

    Dog dog3 = new Dog();
    dog3.setId(2);
    dog3.setName("wangcai");

    Dog dog4 = new Dog();
    dog4.setId(1);
    dog4.setName("tiezhu");

    System.out.println("id,name都相同:" + dog1.equals(dog2));
    System.out.println("id不同,name相同:" + dog1.equals(dog3));
    System.out.println("id相同,name不同:" + dog1.equals(dog4));
    
    /*
    	结果是:
        id,name都相同:true
        id不同,name相同:true
        id相同,name不同:false
    */
    
    /*
    	当打开子类Dog上的注解--@EqualsAndHashCode(callSuper=true)
        结果是:
        id,name都相同:true
        id不同,name相同:false
        id相同,name不同:false
    */
}
所以如果要加上父类中成员变量的判断,加上注解--@EqualsAndHashCode(callSuper=true).
如果想自己根据某值判断,不用用@Data,重写equals。
@RequiredArgsConstructor
  • 生成指定参数的构造器,指定参数必须加上final。
@NoArgsConstructor
  • 无参构造器
@AllArgsConstructor
  • 全参构造器
没有指定构造器时,默认有一个无参构造器,但如果写了构造器之后,默认无参构造器就会消失。
所以指定构造器后,补上 @NoArgsConstrcutor,才会有无参构造器。
@Value
  • 包含Getter,@ToString,@EqualsAndHashCode,@RequiredArgsConstructor。
  • 所有的变量都自动加上final。
  • 适用于不被改变的类上。
@Builder
  • 链式写法。
User user1 = User.builder().id(1).username("wanger").password("123456").build();
@Slf4j
  • 链式写法。
log.debug("");
log.info("");
log.warn("");
log.error("");