冗长的 java代码克星-Lombok

纵然是瞬间 提交于 2019-11-27 13:18:00

一、解决的问题

在写Java程序的时候经常会遇到如下情形: 
新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter和setter方法,toString,equals方法等等。特别是当我们想修改其中一个字段时,关于这个字段的所有方法都需要跟着修改,这是很令人蛋疼的事情,因为毫无技术可言,比搬砖还要难受。

二、Lombok来拯救你

lombok项目的产生就是为了省去我们手动创建getter和setter方法的麻烦,它能够在我们编译源码的时候自动帮我们生成getter和setter方法。即它最终能够达到的效果是:在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法

比如源码文件: 

import java.util.Date;
import lombok.Data;
@Data
public class User {
	private int id;
	private String username;
	private String password;
	private String name;
	private String gender;
	private String phone;
	private Date   registerTime;
	private int balance;
}

以下是编译上述源码文件得到的字节码文件,对其反编译得到的结果 是

package com.wxhl.cn.domain; 
  import java.util.Date;
   public class User {  
 public int getId() { return id; }  
 public string getUsername() { return username; }  
 public string getPassword() { return password; } 
  public string getName() { return name; }  
 public string getGender() { return gender; } 
  public string getPhone() { return phone; } 
  public date getRegisterTime() { return registerTime; }
   public int getBalance() { return balance; }  
 public void setId(int id) { this.id = id; }  
 public void setUsername(string username) { this.username = username; }
   public void setPassword(string password) { this.password = password; }
   public void setName(string name) { this.name = name; }  
    public void setGender(string gender) { this.gender = gender; } 
  public void setPhone(string phone) { this.phone = phone; } 
  public void setRegisterTime(date registerTime) { this.registerTime = registerTime; }
 public void setBalance(int balance) { this.balance = balance; }  
.
.
.
.
.
.
}

上图后面的代码就不贴了...大家都应该懂。

三、速速使用

接下来就介绍Lombok的使用步骤:

①导入lombok包

lombok 的官方网址:http://projectlombok.org/  

②lombok安装

使用 lombok 是需要安装的,如果不安装,IDE 则无法解析 lombok 注解。

1. 双击下载下来的 JAR 包安装 lombok
    我选择这种方式安装的时候提示没有发现任何 IDE,所以我没安装成功,我是手动安装的。如果你想以这种方式安装,请参考官网的视频。

2.eclipse / myeclipse 手动安装 lombok
    2.1. 将 lombok.jar 复制到 myeclipse.ini / eclipse.ini 所在的文件夹目录下
    2.2. 打开 eclipse.ini / myeclipse.ini,在最后面插入以下两行并保存:
        -Xbootclasspath/a:lombok.jar
        -javaagent:lombok.jar
    2.3.重启 eclipse / myeclipse

③、注解
        Lombok 注解在线帮助文档:http://projectlombok.org/features/index.
几个常用的 lombok 注解:
        @Data   :注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
        @Setter:注解在属性上;为属性提供 setting 方法
        @Getter:注解在属性上;为属性提供 getting 方法
        @Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
        @NoArgsConstructor:注解在类上;为类提供一个无参的构造方法
        @AllArgsConstructor:注解在类上;为类提供一个全参的构造方法

四、支持lombok的编译工具

①Oracle javac直接支持lombok 
②常用的项目管理工具Maven所使用的java编译工具来源于配置的第三方工具,如果我们配置这个第三方工具为Oracle javac的话,那么Maven也就直接支持lombok了 
③Intellij Idea配置的编译工具为Oracle javac的话,也就直接支持lombok了。 
④Eclipse中使用的不是Oracle javac这个编译工具,而是自己实现的Eclipse Compiler for Java (ECJ).要想使ECJ支持lombok,得进行设置,具体是在Eclipse程序目录中的eclipse.ini文件中添加如下两行设置: 
-javaagent:[lombok.jar所在路径] 
-Xbootclasspath/a:[lombok.jar所在路径] 

五、其他问题 

现在使用Intellij Idea作为Java项目的IDE,配置Oracle javac作为编译工具。 
现在有一个A类,其中有一些字段,没有创建它们的setter和getter方法,使用了lombok的@Data注解,另外有一个B类,它调用了A类实例的相应字段的setter和getter方法 
编译A类和B类所在的项目,并不会报错,因为最终生成的A类字节码文件中存在相应字段的setter和getter方法 
但是,IDE发现B类源代码中所使用的A类实例的setter和getter方法在A类源代码中找不到定义,IDE会认为这是错误 
要解决以上这个不是真正错误的错误,可以下载安装Intellij Idea中的"Lombok plugin"。 

六、缺点

使用lombok虽然能够省去手动创建setter和getter方法的麻烦,但是却大大降低了源代码文件的可读性和完整性,降低了阅读源代码的舒适度。 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!