提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
Lombok详解
提示:以下是本篇文章正文内容,下面案例可供参考
一、Lombok是什么?
Lombok 是一个 Java 库,它的主要目的是减少 Java 开发中的冗余代码,特别是在创建 POJOs(Plain Old Java Objects)时。通过使用 Lombok 提供的注解,开发者可以避免手动编写 getter、setter、构造函数、equals、hashCode 方法以及 toString 方法等常见且重复的代码。
二、使用步骤
1.引入库
代码如下(示例):
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
2.使用
引入Lombok依赖后可以通过注解来快速生成get/set方法以及有参无参构造
@Getter 和 @Setter:自动生成 getter 和 setter 方法。
@EqualsAndHashCode:生成 equals 和 hashCode 方法。
@ToString:生成 toString 方法。
@NoArgsConstructor:生成无参构造器。
@AllArgsConstructor:生成包含所有字段的构造器。
@Data:这是一个组合注解,包含了上面提到的所有注解的功能,适用于简单的 POJO 类。
2.1示例
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Person {
private String name;
private int age;
private String sex;
}
使用完@Data、@AllArgsConstructor、@NoArgsConstructor、@Builder会自动为我们生成get/set、equals、hashcode、tostring、有参无参构造函数和构建者函数。虽然在源代码中只有这几个注解,但在生成的字节码文件中为我们写好了上述这些方法。
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.llf.bean;
public class Person {
private String name;
private int age;
private String sex;
public static PersonBuilder builder() {
return new PersonBuilder();
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public String getSex() {
return this.sex;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setSex(String sex) {
this.sex = sex;
}
public boolean equals(Object o) {
if (o == this) {
return true;
} else if (!(o instanceof Person)) {
return false;
} else {
Person other = (Person)o;
if (!other.canEqual(this)) {
return false;
} else {
label39: {
Object this$name = this.getName();
Object other$name = other.getName();
if (this$name == null) {
if (other$name == null) {
break label39;
}
} else if (this$name.equals(other$name)) {
break label39;
}
return false;
}
if (this.getAge() != other.getAge()) {
return false;
} else {
Object this$sex = this.getSex();
Object other$sex = other.getSex();
if (this$sex == null) {
if (other$sex != null) {
return false;
}
} else if (!this$sex.equals(other$sex)) {
return false;
}
return true;
}
}
}
}
protected boolean canEqual(Object other) {
return other instanceof Person;
}
public int hashCode() {
int PRIME = true;
int result = 1;
Object $name = this.getName();
result = result * 59 + ($name == null ? 43 : $name.hashCode());
result = result * 59 + this.getAge();
Object $sex = this.getSex();
result = result * 59 + ($sex == null ? 43 : $sex.hashCode());
return result;
}
public String toString() {
return "Person(name=" + this.getName() + ", age=" + this.getAge() + ", sex=" + this.getSex() + ")";
}
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public Person() {
}
public static class PersonBuilder {
private String name;
private int age;
private String sex;
PersonBuilder() {
}
public PersonBuilder name(String name) {
this.name = name;
return this;
}
public PersonBuilder age(int age) {
this.age = age;
return this;
}
public PersonBuilder sex(String sex) {
this.sex = sex;
return this;
}
public Person build() {
return new Person(this.name, this.age, this.sex);
}
public String toString() {
return "Person.PersonBuilder(name=" + this.name + ", age=" + this.age + ", sex=" + this.sex + ")";
}
}
}
总结
Lombok 的使用可以极大地提高开发效率,让代码更加简洁、清晰。然而,值得注意的是,Lombok 生成的代码是在编译后的字节码中,因此在阅读或调试编译后的代码时,这些自动生成的方法不会在源代码中显示出来。这对于团队协作和代码审查可能会产生一定的影响,因此在项目中使用 Lombok 时需要确保所有团队成员都熟悉它的使用和限制。