Lombok究竟是什么? 程序员
先看一下它的官网设计模式
英语懒得看?不要紧。框架
它大体意思是:Lombok是一个很牛批的插件(本质是个Java库),项目里一旦引入了Lombok神器以后,你项目中全部诸如:对象的构造函数、 equals()
方法,属性的 get()/set()
方法等等,这些没有技术含量的代码通通都不用写了,Lombok帮你搞定一切,所有帮你自动生成!ide
听起来好像是挺不错...函数
眼见为虚,代码为实,本文亲自尝试一下!工具
项目中引入Lombok 布局
首先在项目的 pom.xml
中引入 Lombok
依赖:性能
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
除此以外,还要在IDE中安装Lombok插件,并配置:ui
接下来进行代码实验。this
爽!get/set不用写了
之前咱们写一个 POJO
对象时,好比定义一个课程 Course
,须要本身手动写上每一个字段的 get()
和 set()
方法,就像这样:
public class Course { private Long id; // 课程ID private String name; // 课程名称 private Integer score; // 课程成绩 // 本身手写下面的 get/set 方法! public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getScore() { return score; } public void setScore(Integer score) { this.score = score; } }
可是借助于Lombok,一切都变得优雅起来,代码篇幅省了一半
public class Course { @Getter @Setter private Long id; // 课程ID @Getter @Setter private String name; // 课程名称 @Getter @Setter private Integer score; // 课程成绩 }
两个注解:@Getter
和 @Setter
便可方便搞定。
爽!new对象变得优雅了
在没有用Lombok以前,咱们假如想new一个对象,咱们每每会这么作(以上面的 Course
类为例):
Course course = new Course(); // 首先new一个对象 // 而后逐步去装填对象的各个字段 course.setId( 123l ); course.setName( "高等数学" ); course.setScore( 100 );
引进Lombok以后,咱们只须要在 Course
类上用上 @Builder
注解:
@Builder public class Course { private Long id; // 课程ID private String name; // 课程名称 private Integer score; // 课程成绩 }
则 Course
类对象的建立便可使用 链式表达 的方式一行代码完成:
// 对象能够链式构造,一句话完成 ! Course course = Course.builder().id(123l).name("高等数学").score(100).build();
看到这里,若是你学过设计模式中的 “建造者模式” 的话,必定能猜到 @Builder
注解就是一个典型的“建造者模式”的实现案例!
建造者模式的链式调用用起来实在是很爽!
爽!构造函数不用写了
1、全参构造器不用写了
当你在你的类上使用了Lombok的注解 AllArgsConstructor
时:
@AllArgsConstructor public class Course { private Long id; // 课程ID private String name; // 课程名称 private Integer score; // 课程成绩 }
这时候你的类在编译后会自动生成一个无参构造函数,就像这样:
public class Course { private Long id; // 课程ID private String name; // 课程名称 private Integer score; // 课程成绩 // Lombok自动会帮你生成一个全参构造器!! public Course( Long id, String name, Integer score ) { this.id = id; this.name = name; this.score = score; } }
2、无参数构造器也不用写了
当你在你的类上使用了Lombok的注解 NoArgsConstructor
时:
@NoArgsConstructor public class Course { private Long id; // 课程ID private String name; // 课程名称 private Integer score; // 课程成绩 }
这时候你的类在编译后会自动生成一个无参构造函数,就像这样:
public class Course { private Long id; // 课程ID private String name; // 课程名称 private Integer score; // 课程成绩 // Lombok自动会帮你生成一个无参构造器!! public Course() { } }
3、部分参数构造器也不用写了
当你在你的类上使用了Lombok的注解 RequiredArgsConstructor
时:
@RequiredArgsConstructor public class Course { private Long id; // 课程ID private final String name; // 课程名称 private Integer score; // 课程成绩 }
这时候你的类在编译后会自动生成一个具有部分参数的构造函数,就像这样:
public class Course { private Long id; // 课程ID private final String name; // 课程名称 private Integer score; // 课程成绩 // 由于name字段定义成final,因此Lombok自动会帮你生成一个部分参数的构造器!! public Course(String name) { this.name = name; } }
由于 name
字段定义成 final
,因此 Lombok
自动会帮你生成一个部分参数的构造器!!
爽!null判空不用写了
Lombok的 @NonNull
注解能够自动帮咱们避免空指针判断。该注解做用在方法参数上,用于自动生成空值参数检查,好比:
public static void output( String input ) { // 做为一个严谨且良心的Java开发工程师 // 通常咱们要手动对入参进行校验,就像下面这样 ! if( input == null ) { System.out.println("该函数输入参数为空"); } System.out.println( input ); }
可是有了Lombok以后,事情就变得简单了,一个注解搞定:
public static void output( @NonNull String input ) { // 原先这里对 input 的判空不用手动作了 System.out.println( input ); }
爽!屁股不用擦了
什么意思呢?
假如咱们要读取一个 txt
文本文件,通常会这样写代码:
BufferedReader br = null; try { FileReader fileReader = new FileReader("呵呵.tet"); // 定义文件 br = new BufferedReader( fileReader ); // 读取文件 System.out.println( br.readLine() ); // 读取文件一行内容 } catch (Exception e) { e.printStackTrace(); } finally { try { br.close(); // 不管如何文件句柄在使用结束后得手动关闭!! } catch (IOException e) { e.printStackTrace(); } }
注意,这个文件句柄在使用完成以后是必定要手动 close
的,不然就有可能资源泄漏。
有了Lombok以后,这种擦屁股活儿通通不用干了,一个 @Cleanup
注解便可搞定
@Cleanup BufferedReader br = null; // 一个 @Cleanup注解搞定! try { FileReader fileReader = new FileReader("呵呵.tet"); br = new BufferedReader( fileReader ); System.out.println( br.readLine() ); } catch (Exception e) { e.printStackTrace(); }
爽!异常不用捕捉了
好比咱们打开一个 txt
文本文件:
public void openTxt( String filename ) { try { FileReader fileReader = new FileReader( filename ); } catch (FileNotFoundException e) { e.printStackTrace(); } }
这地方的 FileNotFoundException
异常,要么显式地在函数级抛出,要么就像上面同样 try/catch
内部消灭。
若是在编码时,不想处理这种繁杂的异常处理,你可使用Lombok的 @SneakyThrows
注解进行简化,好比上面的代码就能够简化为:
@SneakyThrows public void openTxt( String filename ) { FileReader fileReader = new FileReader( filename ); }
这样你编码时就无需处理异常了。
必须友情提示的是:这样写你是爽了,但你颇有可能会被队友一顿暴打,由于别人调用你编写的函数,并不能显式的获知须要处理哪些异常,这样容易留坑!
还有不少 ...
好了,受限于篇幅限制,抛砖引玉就到这里了。
上面列举了几个平时项目开发中使用很是频繁的Lombok注解,除此以外,还有诸如像:
@ToString
:为类自动生成toString()方法
@EqualsAndHashCode
:为类自动生成hashCode和equals实现
@Log
:为类自动生成log日志记录
@Synchronized
:为类方法或实例方法自动生成synchronized保护
等工具也是很是好用的,你们能够尝试在项目里用起来。
今后,代码5分钟,划水2小时不是梦。。。
天天进步一点点!Peace!
欢迎关注,点个在看