在开发java项目过程中,我们会使用 pojo。 pojo 又叫做 javabean、bean、entity 等
在pojo里有时会写很多的 setter 和 getter , toString, hashcode, equals 等一大堆方法,每新增或者减少一个 pojo 就要在里面写好或者替换删改这些方法,还是很麻烦的且费时间的,而且那些方法还会使得代码看起来很臃肿,像一个大胖子,非常不美观
就像这样,很令人头痛。
public class Hero {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Hero [id=" + id + ", name=" + name + "]";
}
public Hero(int id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Hero other = (Hero) obj;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
但是!在使用了Lombok的@Getter和@Setter注解后,代码会苗条一些:
@Getter
@Setter
public class Hero {
private int id;
private String name;
@Override
public String toString() {
return "Hero [id=" + id + ", name=" + name + "]";
}
public Hero(int id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Hero other = (Hero) obj;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
然而,Lombok远不止这点能耐,它还可以让代码更苗条一些,上面的代码还有改进空间,我们可以使用另一个神奇的注解——@EqualsAndHashCode 来替换掉equals和hashCode方法,如:
@Getter
@Setter
@EqualsAndHashCode
public class Hero {
private int id;
private String name;
@Override
public String toString() {
return "Hero [id=" + id + ", name=" + name + "]";
}
public Hero(int id, String name) {
super();
this.id = id;
this.name = name;
}
}
现在这么一看,是不是代码量减少了很多,看着顺眼多了吧。但是,这还有个tostring方法看着也很多多余啊,lombok有没有相应注解换掉它呢?还真有!我们可以使用@ToString注解:
@Getter
@Setter
@EqualsAndHashCode
@ToString
public class Hero {
private int id;
private String name;
}
在使用lombok一顿“魔改”操作后,原来的十几行只剩下了短短八行小代码,看着是不是很爽,你以为到这就结束了?不不不...
那只是你以为。接下来,是Lombok的极致操作,它为我们提供了@Data 注解,这个注解不仅可以将那些get、set、tostring...全部替换掉,还可以将头顶上的“小帽子”也换掉!
@Data
public class Hero {
private int id;
private String name;
}
是不是觉得很牛。这一个介绍就到此结束啦。
注:文章所用代码引用自lombok系列教材 (一)- 简介