Lombok主页html
Lombok引入项目以后,即可以使用 本文记录了在项目中应用Lombok时的使用案例,但愿对朋友你有一些帮助。java
能够去 下载jar包安全
maven:eclipse
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency>
gradle:maven
// https://mvnrepository.com/artifact/org.projectlombok/lombok compile group: 'org.projectlombok', name: 'lombok', version: '1.16.10'
目前最新版本为1.16.10。工具
初学Lombok的使用时,建议配合Java的编译工具,便于理解Lombok在背后作的事情。性能
使用 lombok 是须要安装的,若是不安装,IDE 则没法解析 lombok 注解。先在官网下载最新版本的 JAR 包。gradle
第一次使用的时候我下载的是最新版本的,也就是我如今用的1.16.10 目前版本更新很快。spa
1.双击下载下来的 JAR 包安装 lombok调试
我选择这种方式安装的时候提示没有发现任何 IDE,因此我没安装成功,我是手动安装的。若是你想以这种方式安装,请参考官网的视频。
2.eclipse 手动安装 lombok
(1). 将 lombok.jar 复制到eclipse.ini 所在的文件夹目录下
(2). 打开 eclipse.ini,在最后面插入如下两行并保存:
-Xbootclasspath/a:lombok.jar -javaagent:lombok.jar
(3).重启 eclipse
没使用Lombok以前,定义JavaBean时,须要为每一个成员定义getter/setter方法,不管手写或者自动生成,过程都不麻烦,但当Bean里的成员蛮多时,看代码的时候就比较心烦,无关的部分愈来愈多。随着项目的成长,代码的行数也奇迹般的增加,以致于项目经理在评估工做量时都要考虑适时的调整比率,麻烦呀。
经过在在class关键字前增长@Data,Lombok除了自动生成全部非final成员的getter/setter方法外,还有额外的福利,lombok同时生成了toString、equals、hashCode方法,而且彻底符合规范,这样缩减了代码的规模,也少了手写toString/equals/hashCode方法的烦恼。
@Data class Person { private String name; private int age; private String job; private Object info; }
在调试代码时常常遇到一个问题,查看某个变量的值时,发现变量窗口展现的是一个奇怪的值(或者说对象在JVM内部表示的地址,这实际上是toString方法的默认实现);想要查看对象内部各成员的值就须要逐层展开,这样才能看到内部的信息。相似的调试过程烦不胜烦,但对于定义了合适的toString方法的类的对象,调试时查看其内部成员的值则会简单许多,调试器会自动调用对象的toString方法,并将获得的字符串展现在变量值窗口,这无疑为调试带来了莫大便利。但手写toString方法其实很是麻烦,有过相关经历的朋友可能会深有体会。对于某个具体的类来讲,出于安全或者性能或者其它方面的考虑,可能并不但愿所有成员都出如今toString方法的返回值里。
@ToString(exclude = { "age", "job" }, includeFieldNames = false, doNotUseGetters = true) class Staff { private String name; private int age; private String job; private Object info; } @ToString(callSuper = false) class Student extends Staff { private String schoolName; private int classNo; }
在项目开发过程当中,虽然场景比较少,但仍然不可避免存在须要自定义equals或者hashCode方法的时候,固然这也是头疼的时候。根据《Effective Java》中的建议,equals方法和hashCode方法要同时实现,而且保证一致性。Lombok提供的@EqualsAndHashCode完美的解决了手写equals和hashCode方法时遇到的所有问题,不须要刻意关注底层的实现细节
@EqualsAndHashCode(exclude = { "age", "job" }, doNotUseGetters = true) class Staff { private String name; private int age; private String job; private Object info; } @EqualsAndHashCode(callSuper = false) class Student extends Staff { private String schoolName; private int classNo; }
经过这两个注解,能够灵活控制是否为字段提供getter/settere方法,以及getter/setter方法的访问权限。因为使用很是简单,之后就不用看到一大堆的get set 啰。
class Person { @Getter @Setter private String name; @Getter private String schoolName; @Setter private int classNo; @Getter(AccessLevel.MODULE) private int age; @Getter(AccessLevel.NONE) private String job; @Getter(AccessLevel.PRIVATE) private Object info; }