前言
在日常开发中,我们时常需要编写一些重复的、非业务相关的功能性代码。比如实体类私有属性的 get / set 方法、创建日志输出类等。
这也是 Java 饱受诟病的地方之一。往往这些冗余的代码虽然跟业务无关,但由于其功能性又不得不写,十分浪费时间,影响美观不说,后期如果有改动还不方便维护。
为了解决上述痛点,就不得不提到神器 Lombok 了。有了 Lombok,在开发中我们就可以使用简单的注解,来避免编写那些重复的功能性代码。在编译的时候,Lombok 会根据注解自动帮我们生成我们省去的那些代码。是不是很神奇?那么接下来我就来介绍下 Lombok 的常见使用方法。
环境配置
添加 Maven 依赖
在 pom.xml 添加 Maven 依赖。
<dependency>
<groupId>org.projectlombok
</groupId>
<artifactId>lombok
</artifactId>
<version>1.16.22
</version>
</dependency>
在 IDEA 中添加 Lombok 插件
打开 IntelliJ IDEA -> Preferences -> Plugins,搜索“Lombok”并安装。
如果不安装该插件,是不影响程序的正常运行。但是在开发中会出现红波浪线浪报警,看着令人恼火。安装这个插件,是为了让编译器支持解析 Lombok 注解,在使用时不报错。
Lombok 的使用
@Getter & @Setter
@Getter & @Setter 注解可以用于自动生成实体类中私有属性的 get 和 set 方法。
Lombok 写法
@Getter
@Setter
public class Person {
private int id
;
private String name
;
private int age
;
}
将 @Getter & @Setter 注解打在类上,那么该类中的所有方法都将生成 get 和 set 方法。如果想要对个别属性单独配置,也可以将 @Getter & @Setter 注解打在需要的属性上。
等价的 Java 代码
public class Person {
private int id
;
private String name
;
private int age
;
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
;
}
public int getAge() {
return age
;
}
public void setAge(int age
) {
this.age
= age
;
}
}
@ToString
用于重写 toString() 方法,将类中的属性一次输出。
Lombok 写法
@ToString(callSuper
= true)
public class Person {
private int id
;
private String name
;
private int age
;
}
等价的 Java 代码
public class Person {
private int id
;
private String name
;
private int age
;
public String
toString() {
return "Foo(super=" + super.toString() +
", id=" + this.id
+
", name=" + this.name
+
", age=" + this.age
+ ")";
}
}
@ToString() 中常用属性:
callSuper: 默认为 false。true 时会把 super 中的 toString() 方法一并输出。onlyExplicitlyIncluded:是否只输出指定属性。默认为 false。include:可以指定要输出哪些属性。要配合 onlyExplicitlyIncluded 属性使用。exclude:可以指定不输出哪些属性。
@EqualsAndHashCode
用于重写 equals() 和 hashCode() 方法。
Lombok 写法
@EqualsAndHashCode
public class Person {
private int id
;
private String name
;
private int age
;
}
等价的 Java 代码
public class Person {
private int id
;
private String name
;
private int age
;
public boolean equals(final Object o
) {
if (o
== this) {
return true;
} else if (!(o
instanceof Person2)) {
return false;
} else {
Person2 other
= (Person2
)o
;
if (!other
.canEqual(this)) {
return false;
} else if (this.id
!= other
.id
) {
return false;
} else {
Object
this$name
= this.name
;
Object other$name
= other
.name
;
if (this$name
== null
) {
if (other$name
== null
) {
return this.age
== other
.age
;
}
} else if (this$name
.equals(other$name
)) {
return this.age
== other
.age
;
}
return false;
}
}
}
protected boolean canEqual(final Object other
) {
return other
instanceof Person2;
}
public int hashCode() {
int PRIME
= true;
int result
= 1;
int result
= result
* 59 + this.id
;
Object $name
= this.name
;
result
= result
* 59 + ($name
== null
? 43 : $name
.hashCode());
result
= result
* 59 + this.age
;
return result
;
}
}
@Data
一般,我使用 @Data 注解最多。@Data 注解是将 @ToString、@EqualsAndHashCode、@Getter、@Setter 集合与一身。
Lombok 写法
@Data
public class Person {
private int id
;
private String name
;
private int age
;
}
等价的 Java 因为篇幅过长我就不贴了,因为是集合上述的四个注解,所以等价代码等于上述等价代码的合并。
@Log
@Log 类注解用于创建日志输出类。支持如下几种模式,分别对应不同的日志框架。
@CommonsLog@Flogger@JBossLog@Log@Log4j@Log4j2@Slf4j@XSlf4j@CustomLog
我常用的类型是 @Slf4j。
Lombok 写法
@Slf4j
@Service
public class MyServiceImpl implements MyService {
@Override
public void test() {
log
.info("使用 @Slf4j 输出日志");
}
}
等价的 Java 代码
@Service
public class MyServiceImpl implements MyService {
private static final Logger log
= LoggerFactory
.getLogger(MyServiceImpl
.class);
public MyServiceImpl() {
}
public void test() {
log
.info("使用 Logger 输出日志");
}
}
以上就是开发中常用的 Lombok 注解,确实能在很大程度上帮助我们简化代码,让开发人员把更多精力集中在业务代码的编写。尤其是在对 POJO 的操作上,碰上属性特别多的类,只需要标注一个 @Data 注解,就能少些很多代码。
本文仅介绍一些常用的 Lombok 注解。想要了解更多 Lombok 内容,可以参考其它资料。
本章代码地址:GitHub
推荐文章:
Introduction to Project LombokREDUCING BOILERPLATE CODE WITH PROJECT LOMBOKLombok注解系列文章总览
我是因特马,一个爱分享的斜杠程序员~
欢迎关注我的公众号:一只因特马
原文作者: 一只因特马 原文链接: https://www.interhorse.cn/a/68291188/ 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-ND 许可协议。转载请注明出处!