Java编码辅助工具Lombok用法详解
前言
在项目开发过程中,经常会涉及到一些调整很少但又必不可少的环节,比如实体类的Getter/Setter方法,ToString方法等。这时可以使用Lombok来避免这种重复的操作,减少非核心代码的臃肿,提高编码效率。
如何在IntelliJIDEA中引入Lombok
安装Lombok插件(否则在调用setter/getter方法时IDE会提示报错):File->Settings->Plugins搜索LombokPlugin完成安装。
pom.xml中引入lombok依赖(其中
org.projectlombok lombok 1.16.20 provided
Lombok注解用途
@Getter/@Setter
为字段生成Getter和Setter方法,可以注解到字段或者类上(注解在类上会为类中所有字段生成Getter和Setter方法)。默认是public类型的,如果需要的话可以修改方法的访问级别:@Getter(AccessLevel.PROTECTED)
Lombok中的注解一般都会包含一个无参构造函数注解@NoArgsConstructor(用于生成无参构造函数),所以还会额外生成一个无参构造函数
@NonNull
调用字段的setter方法时,如果传的参数为null,则会抛出空异常NullPointerException,生成setter方法时会检查参数是否为空
@NoArgsConstructor
生成一个无参构造方法。当类中有final字段没有被初始化时,编译器会报错,此时可用@NoArgsConstructor(force=true),然后就会为没有初始化的final字段设置默认值0/false/null,这样编译器就不会报错。对于具有约束的字段(例如@NonNull字段),不会生成检查或分配,因此请注意,正确初始化这些字段之前,这些约束无效。
@RequiredArgsConstructor
生成构造方法(可能带参数也可能不带参数),如果带参数,这参数只能是以final修饰的未经初始化的字段,或者是以@NonNull注解的未经初始化的字段。
@RequiredArgsConstructor(staticName=“of”)会生成一个of()的静态方法,并把构造方法设置为私有的
@AllArgsConstructor
生成一个全参数的构造方法
@ToString
生成toString()方法,默认情况下它会按顺序(以逗号分隔)打印你的类名称以及每个字段。可以这样设置不包含哪些字段,可以指定一个也可以指定多个@ToString(exclude=“id”)/@ToString(exclude={“id”,”name”})。如果继承的有父类的话,可以设置callSuper让其调用父类的toString()方法,例如:@ToString(callSuper=true)
@EqualsAndHashCode
生成hashCode()和equals()方法,默认情况下,它将使用所有非静态,非transient字段。但可以通过在可选的exclude参数中来排除更多字段。或者,通过在of参数中命名它们来准确指定希望使用哪些字段。
//exclude排除字段 @EqualsAndHashCode(exclude={“password”,“salt”}) //of指定要包含的字段 @EqualsAndHashCode(of={“id”,“phone”,“password”})
@Data
@Data包含了@ToString、@EqualsAndHashCode、@Getter/@Setter和@RequiredArgsConstructor的功能
@Value
@Value将字段都变成不可变类型:使用final修饰,同时还包含@ToString、@EqualsAndHashCode、
@AllArgsConstructor、@Getter(注意只有Getter没有Setter)
@Log
生成log对象,用于记录日志,可以通过topic属性来设置getLogger(Stringname)方法的参数例如@Log4j(topic=“com.xxx.service.xxx”),默认是类的全限定名,即类名.class,log支持以下几种:
- @Logjava.util.logging.Logger
- @Log4jorg.apache.log4j.Logger
- @Log4j2org.apache.logging.log4j.Logger
- @Slf4jorg.slf4j.Logger
- @XSlf4jorg.slf4j.ext.XLogger
- @CommonsLogorg.apache.commons.logging.Log
- @JBossLogorg.jboss.logging.Logger
@Log privatestaticfinaljava.util.logging.Loggerlog=java.util.logging.Logger.getLogger(LogExample.class.getName()); @Log4j privatestaticfinalLoggerlog=org.apache.log4j.Logger.Logger.getLogger(UserService.class); @Log4j2 privatestaticfinalorg.apache.logging.log4j.Loggerlog=org.apache.logging.log4j.LogManager.getLogger(LogExample.class); @Slf4j privatestaticfinalorg.slf4j.Loggerlog=org.slf4j.LoggerFactory.getLogger(LogExample.class); @XSlf4j privatestaticfinalorg.slf4j.ext.XLoggerlog=org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class); @CommonsLog privatestaticfinalorg.apache.commons.logging.Loglog=org.apache.commons.logging.LogFactory.getLog(LogExample.class); @JBossLog privatestaticfinalorg.jboss.logging.Loggerlog=org.jboss.logging.Logger.getLogger(LogExample.class);
@SneakyThrows
使用trycatch修饰方法,来捕获异常,默认捕获的是Throwable异常,也可以设置要捕获的异常:@SneakyThrows(InterruptedException.class)
@Synchronized
给方法加上同步锁
@Cleanup
主要用来修饰IO流相关类,会在finally代码块中对该资源进行close();
@Getter(lazy=true)
标注字段为懒加载字段,懒加载字段在创建对象时不会进行初始化,而是在第一次访问的时候才会初始化,后面再次访问也不会重复初始化
@Wither
提供了给final字段赋值的一种方法
@Builder
为你的类生成复杂的构建器API。
@Delegate
为List类型的字段生成一大堆常用的方法,其实这些方法都是List中的方法。注意:一个类中只能使用一个@Delegate注解,因为使用多个会生成多个size()方法,从而会编译报错。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。