Lombok
是一个能够经过简单的注解形式来帮助咱们简化消除一些必须有但显得很臃肿的Java代码的工具,经过使用对应的注解,能够在编译源码的时候生成对应的方法。 前端
简单来讲,咱们平时开发过程当中老是要花不少时间为Java Bean
去建立getter
和setter
方法,当类里面的属性不少时则建立的getter
和setter
就不少,代码就很长。而lombok
就能够为咱们省去建立getter
和setter
方法的麻烦,代码也会更加简洁。java
Lombok官方地址: https://projectlombok.org/web
操做步骤:File
-> Settings...
-> Plugins
-> Browse repositories...
-> 输入Lombok
搜索并安装,安装完成后重启IntelliJ IDEA。ide
若是是使用Maven构建项目,则添加如下依赖:函数
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.18</version> <scope>provided</scope> </dependency> </dependencies>
不然直接下载jar包并引入到项目中,下载地址为:下载Lombok工具
lombok
的使用主要是经过注解方式,官网文档lombok注解 有很详细的说明。ui
@@NonNull
@NonNull
为方法或构造函数的参数生成null
检查语句,至关于if (param == null) throw new NullPointerException("param");
;生成的null
检查语句会插入到方法的最前端,若是是构造函数,则在this()
或super()
调用以后插入null
检查。this
使用lombok
,咱们能够这样写:spa
import lombok.NonNull; public class User extends BaseEntity { private String name; private String password; public User(@NonNull Person person) { super("Hello"); this.name = person.getName(); this.password = person.getPassword(); } }
而不使用lombok
则是这样写:插件
import lombok.NonNull; public class User extends BaseEntity { private String name; private String password; public User(@NonNull Person person) { super("Hello"); if (person == null) { throw new NullPointerException("person"); } this.name = person.getName(); this.password = person.getPassword(); } }
@Getter
/@Setter
使用@Getter
/@Setter
给字段注解,lombok
会自动生成默认的getter
/setter
方法,在Intellij IDEA的Structure
栏中可查看这个类的概要,就能够看到getter
和setter
方法已被添加到User
类中:
在未指定字段修饰符状况下,lombok
生成的getter
/setter
方法是public
的,若要修改其修饰符可设置AccessLevel
的值,如:
import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; public class User { private @Getter(AccessLevel.PRIVATE) @Setter String name; private @Getter @Setter String password; }
此时能看到User
类中的getName
方法的图标变成了一个锁,说明getName
方法已是private
的,将不会被公开:
@ToString
使用@ToString
会生成toString()
方法,它会按顺序依次打印类名、字段;若想忽略输出字段,则能够用exclude
设置参数;若是有继承父类,能够设置callSuper
为true
让其调用父类toString()
方法:
@ToString(exclude = "password", callSuper = true) public class User extends BaseEntity { private @Getter @Setter String name; private @Getter @Setter String password; }
@EqualsAndHashCode
使用@EqualsAndHashCode
会生成hashCode()
和equals()
方法,默认会使用全部非静态、非transient
字段;
若是想排除某些字段可设置exclude
参数;
若是有继承父类,能够设置callSuper
为true
让其调用父类生成的equals()
和hashCode
方法,可是当没有继承父类并设置callSuper
为true
时会在编译时报错:
import lombok.*; @EqualsAndHashCode(exclude = "password") public class User { private @Getter @Setter String name; private @Getter @Setter String password; @EqualsAndHashCode(callSuper = true) public static class Department extends BaseEntity { private @Getter @Setter String departmentName; } }
在Intellij IDEA的Structure栏中可查看到有equals()
和hashCode()
方法:
@NoArgsConstructor
, @RequiredArgsConstructor
, @AllArgsConstructor
@NoArgsConstructor
生成一个无参数构造函数:
@RequiredArgsConstructor
生成构造函数;若是带有参数,则该参数必须是以final
修饰并未初始化的字段或@NonNull
注解的并未初始化的字段,参数的顺序和字段在类中的声明顺序一致。
以@NonNull
注解并未初始化的:
以final
修饰并未初始化的:
正确和错误示例:
@AllArgsConstructor
生成全参数构造函数,将类中的每一个字段生成带有1个参数的构造函数,例若有3个字段,则构造函数的参数为3个:
@Data
@Data
包含了@ToString
, @EqualsAndHashCode
, @Getter
, @Setter
, @RequiredArgsConstructor
的功能:
@Builder
@Builder
为类、构造器、方法上生成复杂的构建器API;构造实例时,其属性再也不须要单独set
,能够经过如下方式进行实例化:Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();
val
、@Cleanup
、@SneakyThrows
、@Synchronized
、@Getter(lazy=true)
、@Log
、experimental
等就再也不作介绍,用法和说明可查看官网文档https://projectlombok.org/features/all。
使用lombok
可以为咱们省去手动建立getter
和setter
方法的麻烦,lombok
有助于代码的整洁、效率的提升以及冗余的减小,但也同时下降了源代码文件的可读性和完整性。
不可过分依赖lombok。