如何编写优雅的 Java 代码

不知道各位在项目开发过程中有没有过这种体会,接手上一任的代码,看到代码的那一刻,有一种想要砸电脑的冲动,一个方法体内写了无数行代码,到处皆可看到复制粘贴的代码,变量命名也让人看不懂 。
各位在编码时,是否有想过,我如何才能写出高质量的代码,写出优雅的代码,写出高度可扩展的代码 。我相信大家都希望能写出那样的代码,让人佩服的五体投地,可不知道如何写,那么本文就是为帮助大家提高编码质量而生的 。
我相信,大家在看完本文后,一定会有所领悟 。下面,我们就进入主题 。
使用 lombok 简化代码在介绍 lombok 之前,我们先来看一段代码:
public class Person {private Long id;private String name;private Integer age;private Integer sex;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 getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getSex() {return sex;}public void setSex(Integer sex) {this.sex = sex;}}这段代码大家应该都很熟悉,我们在开发 JAVAWeb 项目时,定义一个 Bean,会先写好属性,然后设置 getter/setter 方法,这段代码本身没有任何问题,也必须这样写 。
但是每个 bean 都需要些 getter/setter,这样写的话就不够优雅了,这段代码我们如何优雅的写呢?接下来就轮到强大的 lombok 出场了 。
lombok 是一个可以通过注解的形式来简化我们的代码的一个插件,要使用它,我们应该先安装插件,安装步骤如下:
1.

如何编写优雅的 Java 代码

文章插图
 
打开 IDEA 的 Plugins,点击 Browse repositories 。
2.
如何编写优雅的 Java 代码

文章插图
 
搜索 lombok,并安装它,安装好后重启 IDEA 。
3.
如何编写优雅的 Java 代码

文章插图
 
打开 Settings,找到 Annotaion Processors,将 Enable annotaion processing 勾选上 。
4.单纯这样还不够,我们要用到 lombok 的注解还需要添加其依赖:
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.0</version><scope>provided</scope></dependency>接下来,我们改造 Person 类:import lombok.Getter;import lombok.Setter;@Getter@Setterpublic class Person {private Long id;private String name;private Integer age;private Integer sex;}我们可以看到,在类上加入了 Getter 和 Setter 两个注解,将之前写的 getter/setter 方法干掉了,这种代码看着清爽多了,写个 main 方法来测试下:
public static void main(String[] args) {Person person = new Person();person.setName("lynn");person.setId(1L);System.out.println(person.getName());}我们并没有写任何 setter/getter 方法,只是加了两个注解就可以调用了,这是为什么呢?这是因为 lombok 提供的 Getter 和 Setter 注解是编译时注解,也就是在编译时,lombok 会自动为我们添加 getter/setter 方法,因此我们不需要显式地去写 getter/setter 方法而可以直接调用,这样的代码是不是看着非常优雅 。
当然,lombok 的功能不止于此,它提供了很多注解以简化我们的代码,下面,我将分别介绍它的其他常用注解:
@Accessors该注解的作用是是否开启链式调用,比如我们开启链式调用:
@Getter@Setter//chain设置为true表示开启链式调用@Accessors(chain = true)public class Person {private Long id;private String name;private Integer age;private Integer sex;public static void main(String[] args) {Person person = new Person();person.setName("lynn").setId(1L);}}@Builder构建者模式,我们在使用第三方框架时经常能看到 Builder 模式,比如 HttpClient 的:
RequestConfig config = RequestConfig.custom().setConnectionRequestTimeout(timeout).setConnectTimeout(timeout).setSocketTimeout(timeout).build();那么,通过 Builder 注解可以很方便的实现它:
@Getter@Setter@Builderpublic class Person {private Long id;private String name;private Integer age;private Integer sex;public static void main(String[] args) {Person person = new PersonBuilder().name("lynn").id(1L).build();}}@Data编译时添加 getter、setter、toString、equals 和 hashCode 方法,如:
@Datapublic class Person {private Long id;private String name;private Integer age;private Integer sex;public static void main(String[] args) {Person person = new Person();person.setName("lynn");System.out.println(person);}}


推荐阅读