文档章节

冗长的 java代码克星-Lombok

ws199358
 ws199358
发布于 2016/09/22 21:00
字数 1178
阅读 96
收藏 3

一、解决的问题

在写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方法的麻烦,但是却大大降低了源代码文件的可读性和完整性,降低了阅读源代码的舒适度。 

© 著作权归作者所有

共有 人打赏支持
ws199358
粉丝 6
博文 21
码字总数 17855
作品 0
深圳
程序员
私信 提问
Lombok 1.16.18 发布,消除冗长的 Java 代码

Lombok 1.16.18 已发布,更新如下: v1.16.18 (July 3rd, 2017) 平台:自 v1.16.6 以来,大大改进对 JDK 9 的支持; Issue #985 Bug 修复:Lombok 现可与 Bazel 和 Error Prone 运行 Issue #1...

淡漠悠然
2017/07/05
1K
10
lombok 不用再写pojo的getset

java实体类不写get/set方法 1、下载地址https://projectlombok.org/download Myeclipse、eclipse安装lombok Lombok是一种Java实用工具,可以帮助开发人员消除Java的冗长,具体看lombok的官网...

木之下
2018/08/14
0
0
Lombok 1.18.0 发布,消除冗长的 Java 代码

Lombok 1.18.0 已发布,更新如下: BREAKING CHANGE: 在 1.16.22 引入的可配置 key 现在默认为 。Issue #1708 BUGFIX: Do not generate a private no-args constructor if that breaks the ......

淡漠悠然
2018/06/07
2.4K
36
以简单的方式消除 Java 的冗长

Lombok 是一种 Java Archive (JAR) 文件,可用来消除 Java 代码的冗长。 我们看这样一个例子,一个标准的 Java bean。一个典型的 Java bean 一般具有几个属性。每个属性具有一个 accessor 和...

红薯
2010/04/13
1K
6
Lombok 1.18.2 发布,消除冗长的 Java 代码

Lombok 1.18.2 已发布。下载地址 >>> https://projectlombok.org/download 该版本包含 bug 修复和新增功能特性。具体如下: BUGFIX: mapstruct + lombok in eclipse should hopefully work ......

淡漠悠然
2018/07/30
1K
12

没有更多内容

加载失败,请刷新页面

加载更多

声学所实验室的论文

https://hccl.ioa.ac.cn/output/papers/

shengjuntu
40分钟前
0
0
Mysql(Mariadb)数据库主从复制

Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据库中所有操作都...

linux-tao
今天
2
0
Mysql(Mariadb)数据库主从复制

Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据库中所有操作都...

Linux就该这么学
今天
2
0
Mysql(Mariadb)数据库主从复制

Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据库中所有操作都...

xiangyunyan
今天
2
0
Android 贝塞尔曲线实践——旋转的七色花朵

一、关于贝塞尔曲线 在工业设计方面贝塞尔曲线有很多用途,同样,在Android中,贝塞尔曲线结合Path类可以实现更复杂的图形,这里我们给一个案例,来实现一种旋转的花朵。对于贝赛尔曲线的理解...

IamOkay
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部