Lomok是一个用来简化java代码开发的java库。这篇文章主要解决getters/setters、重写equals、hashCode、toString以及构造函数的编写问题。如果用普通的java编写方式,一定很繁琐。当你看到Lombok项目时,它会让你觉得一身轻松。
使用 Lombok 减少你的样板代码
1. 不用再写getters\setters方法了
比如下面的pojo类,用普通的方式写会是这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
public class Animal { private String name; private String gender; private String species; public String getName(){ return this.name; } public void setName(String name){ this.name = name; } public String getGender(){ return this.gender; } public void setGender(String gender){ this.gender = gender; } public String getSpecies(){ return this.species; } public void setSpecies(String species){ this.species = species; } } |
当写这些getters/setters方法时,我开始慢慢讨厌java了。
使用Lomok的方式来写会是这样:
1 2 3 4 5 6 |
public class Animal { @Getter @Setter private String name; @Getter @Setter private String gender; @Getter @Setter private String species; } |
是不是很容易?
除了这些,Lombok API还提供了其他很棒的特性:
- 不用重写toString方法:可以在pojo类上使用@ToString注解,lombok会把重写后的toString方法放到类中
- 不用重写equals和hashCode方法:在pojo类上使用@EqualsAndHashCode注解,在编译的时候很容易生成equal射hashCode方法
- 用注解来生成构造函数:
- @NoArgsConstructor:用来创建无参的构造函数
- @RequiredArgsConstructor:用来创建构造函数,其参数由所有未初始化的final字段和标记了@NonNull注解的字段
- @AllArgsConstructor:用所有的字段作为参数,来创建构造函数
这些都是很常用的特性,其他特性可以在这里找到:project lombok site
使用了Lombok和未使用Lombok对比的例子
比如我们需要一个类,这个类需要包含equals、hashCode、toString、getters\setters、构造函数。
如果用Lombok来写:
1 2 3 4 5 6 7 8 |
@RequiredArgsConstructor @ToString @EqualsAndHashCode public class Animal { @Getter @Setter private String name; @Getter @Setter private String gender; @Getter @Setter private String species; } |
这样写后Lombok会把这段代码转成常规的java pojo类代码
如果不用Lombok来写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
public class Animal { private String name; private String gender; private String species; public Animal(String name, String gender, String species) { this.name = name; this.gender = gender; this.species = species; } public String getName(){ return this.name; } public void setName(String name){ this.name = name; } public String getGender(){ return this.gender; } public void setGender(String gender){ this.gender = gender; } public String getSpecies(){ return this.species; } public void setSpecies(String species){ this.species = species; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Animal)) return false; Animal animal = (Animal) o; if (gender != null ? !gender.equals(animal.gender) : animal.gender != null) return false; if (name != null ? !name.equals(animal.name) : animal.name != null) return false; if (species != null ? !species.equals(animal.species) : animal.species != null) return false; return true; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + (gender != null ? gender.hashCode() : 0); result = 31 * result + (species != null ? species.hashCode() : 0); return result; } @Override public String toString() { return Objects.toStringHelper(this) //Using guava library objects toString .add("name", name) .add("gender", gender) .add("species", species) .toString(); } } |
此时可能很多java开发会争辩了:“IDE可以帮我们生成这些繁琐的代码,速度比写注解来得更快把!”
如果你这样想,那么你可能遗漏了一点:人们不喜欢java,因为控制和编写所有这些代码其实是一种坏味道。相同的代码在Ruby、Groovy、Perl或者其他脚本语言中都很简单,为啥在java中如此冗长呢。简单才是好,Lombok正是为了java的简单而存在。(java开发应该把更多的时间放在其他的业务逻辑中,不应该在这些地方浪费时间)。
详细内容请看Lombok的官网:https://projectlombok.org/,里面有一段视频介绍,能很清晰介绍如何在eclipse中使用Lombok来简化你的开发。
Lombok的在eclipse中的安装和使用
- 官网上有视频:https://projectlombok.org/。
- 安装和使用的文档:http://jnb.ociweb.com/jnb/jnbJan2010.html
- Lombok其实是通过agent机制在eclipse的启动参数中添加了一个agent(-javaagent:lombok.jar)
Lombok在maven中的使用
在maven中依赖上Lombok:https://projectlombok.org/mavenrepo/index.html
如果需要在maven中使用其打包,请看这里:http://awhitford.github.io/lombok.maven/lombok-maven-plugin/usage.html
Reference
- 原文:http://keaplogik.blogspot.com/2013/04/java-developers-need-to-be-using-lombok.html
- http://www.oschina.net/translate/lombok-reduces-your-boilerplate-code?cmp
- http://www.ibm.com/developerworks/cn/java/j-lombok/