项目中引入Lombok
首先在项目的 pom.xml中引入 Lombok依赖:
-
<dependency> -
<groupId>org.projectlombok</groupId> -
<artifactId>lombok</artifactId> -
</dependency>
除此之外,还要在IDE中安装Lombok插件,并配置:
接下来进行代码实验。
爽!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 { -
-
@Setter -
private Long id; // 课程ID -
-
@Setter -
private String name; // 课程名称 -
-
@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注解就是一个典型的“建造者模式”的实现案例!
建造者模式的链式调用用起来实在是很爽!
爽!构造函数不用写了
一、全参构造器不用写了
当你在你的类上使用了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; -
} -
}
二、无参数构造器也不用写了
当你在你的类上使用了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() { -
} -
-
}
三、部分参数构造器也不用写了
当你在你的类上使用了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 ); -
}
这样你编码时就无需处理异常了。
来源:oschina
链接:https://my.oschina.net/u/200350/blog/3190355