maven
<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
public class Dog extends Animal{
private String name;
}
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));
}
所以如果要加上父类中成员变量的判断,加上注解--@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("");