Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法
pom依赖:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId>
<version>1.18.2</version> </dependency>
下面只是介绍了几个常用的注解,更多的请参见https://projectlombok.org/features/index.html
@Getter/@Setter
可以作用在类上和属性上,放在类上,会对所有的非静态(non-static)属性生成Getter/Setter方法,放在属性上,会对该属性生成Getter/Setter方法。并可以指定Getter/Setter方法的访问级别。
@EqualsAndHashCode
默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。
@ToString
生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。
@NoArgsConstructor、@RequiredArgsConstructor、@AllArgsConstructor
无参构造器、部分参数构造器、全参构造器,当我们需要重载多个构造器的时候,Lombok就无能为力了。
@Data
@ToString, @EqualsAndHashCode, 所有属性的@Getter, 所有non-final属性的@Setter和@RequiredArgsConstructor的组合,通常情况下,我们使用这个注解就足够了
使用示例 (以下5个注解,可以只使用@Data注解代替):
@Getter @Setter @ToString @NoArgsConstructor @EqualsAndHashCode public class UserEntity { private String id; private String lastName; private String email; private Integer age; }
@Builder
优雅的对属性赋值,对外保持private setter
@Getter @Builder(toBuilder = true) public class XwjUser implements Serializable { private static final long serialVersionUID = 1L; private int id; private String message; private Date sendTime; }
public static void main(String[] args) { // @Builder注解赋值新对象 XwjUser user = XwjUser.builder().id(1).sendTime(new Date()).message("hahah").build(); System.out.println(user.toString()); // 修改实体,要求实体上添加@Builder(toBuilder=true) user = user.toBuilder().id(2).build(); System.out.println(user.toString()); }
注意:在使用@Builder(toBuilder=true)的时候,得配合@AllArgsConstructor一起使用