曾经的Java项目中充斥了太多不友好的代码:POJO的Getter/Setter/toString等等,这些代码由于没有什么技术含量,影响了代码的漂亮等缺陷,让Lombok应运而生。
Our-task介绍
本篇博客是我的github上项目our-task:一个完整的清单办理体系的配套教程文档,咱们感兴趣的话,能够去看看
装置Lombok
参加Maven依靠
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
IDEA中装置Lombok插件
顺次点击:FIle-Settings-Plugins,从插件栏中搜索Lombok进行装置,装置之后勾选Lombok启动即可。
注解介绍
@Getter和@Setter
放在类上,为该类的一切特点主动生成Getter和Setter办法
import lombok.Getter;
import lombok.Setter;
/**
* @program: our-task
* @description: 学生类
* @author: water76016
* @create: 2020-12-15 10:57
**/
@Getter
@Setter
public class Student {
int id;
String name;
int age;
}
@ToString
主动重写toString办法,和咱们平常运用IDEA编辑器主动生成的相同
/**
* @program: our-task
* @description: 学生类
* @author: water76016
* @create: 2020-12-15 10:57
**/
@ToString
public class Student {
int id;
String name;
int age;
}
@EqualsAndHashCode
主动生成equal(Object other)和hashCode()办法,如果某些变量不想要参加该注解,能够运用exclude进行排除
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class Student {
int id;
String name;
int age;
}
import lombok.EqualsAndHashCode;
//把name特点排除在外
@EqualsAndHashCode(exclude = "name")
public class Student {
int id;
String name;
int age;
}
问:为什么把生成equal(Object other)和hashCode()办法弄成一个注解,而不是分开运用?
答:在Java中有规则:当两个目标持平时,它们的hashcode是必定持平的。可是,当两个目标的hashcode相同,目标不必定持平。这样做是为了避免违背Java规则的状况产生。
@NoArgsConstructor
生成一个不包括任何参数的无参构造器
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class Student {
int id;
String name;
int age;
}
@AllArgsConstructor
生成一个包括一切参数的构造器
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class Student {
int id;
String name;
int age;
}
@RequiredArgsConstructor
为“特定参数”生成构造器,这里的“特定参数”,特指那些加上final润饰词的特点
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class Student {
int id;
final String name;
int age;
public static void main(String[] args) {
Student student = new Student("33");
}
}
这里咱们只为name加上final润饰,能够发现,咱们只生成了一个包括name特点的构造器。别的,如果一切的特点都没有final润饰的话,运用@RequiredArgsConstructor会生成一个无参的构造器。
@Data
这是一个组合注解,加了这个注解,相当于参加了@Getter、@Setter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor这五个注解。
@Value
这也是一个组合注解,可是会把一切的变量都设置为final的,其他的就和@Data相同了。等同于参加了@Getter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor这四个注解(由于一切特点是final的,所以没有@setter注解了)。
@Builder
流式的set值写法,不过毕竟是给特点赋值,根本的setter仍是需求有的,一般来说,@Builder会和@Data一起运用。
import lombok.Builder;
import lombok.Data;
@Builder
@Data
public class Student {
int id;
String name;
int age;
public static void main(String[] args) {
Student student = Student.builder().id(1).name("water").age(18).build();
}
}
@Slf4j
主动生成该类的log静态常量,就能够直接打印日志了,不用去new一个log的静态常量了。
@Slf4j
public class Student {
int id;
String name;
int age;
public static void main(String[] args) {
log.info("hello world");
}
}