1.優點
- 自動生成構造器、getter/setter、equals、hashcode、toString等方法,提高了一定的開發效率。
- 讓代碼變得簡潔,不用過多的去關注相應的方法
- 更改屬性時省去了手動增刪getter和setter方法這些代碼的麻煩。
2.缺點
- 不支持多種參數構造器的重載。
- 降低了源代碼的可讀性和完整性。
3.常用注解使用
1. @Data
注解在類上,為類的所有屬性自動生成setter/getter方法,為類生成equals、canEqual、hashCode、toString方法,如為final屬性,則不會為該屬性生成setter方法。
使用注解:
@Data
public class User {
private String name;
private Integer age;
}
不使用注解:
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
2. @AllArgsConstructor
注解在類上,生成全參構造器。與之類似的兩個注解:@NoArgsConstructor(生成無參構造器),@RequiredArgsConstructor(部分參數構造器)
使用注解:
@AllArgsConstructor
public class User {
private String name;
private Integer age;
}
不使用注解:
public class User {
private String name;
private Integer age;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
}
3. @Slf4j
注解在類上,替換private final Logger logger = LoggerFactory.getLogger(XXX.class);
使用注解:
@Slf4j
public class User {
public void sayHello(){
log.info("hello");
}
}
不使用注解:
public class User {
Logger log = LoggerFactory.getLogger(User.class);
public void sayHello(){
log.info("hello");
}
}
4. Lombok不生效問題
打開idea的Settings -> Build,Execution,Deployment -> Compiler -> Annotation Processors 勾選 Enable annotation processing
image