在项目中经常会看到lombok的应用,此文作为科普帖,详细介绍lombok
简介:
工作原理:
其优缺点如下:
| 优点 | 缺点 |
|---|---|
| 1.简化代码: Lombok通过自动生成常见的样板代码,减少了开发人员需要编写的代码量,提高了代码的简洁性。 2. 提高开发效率: 通过自动生成代码,开发人员能够更专注于业务逻辑,减少了重复性劳动,提高了开发效率。 3. 可读性: 由于生成的代码是标准的、一致的,提高了代码的可读性。 | 1.隐藏细节: 自动生成的代码可能会隐藏一些细节,开发人员可能不太容易理解具体的实现方式。 2. 不适用于所有场景: Lombok适用于生成一些常见的代码,但并不适用于所有的场景。在某些复杂的情况下,可能需要手动编写代码。 3. 工具依赖: 开发团队需要在开发环境中安装Lombok插件或者通过构建工具配置来支持Lombok,这增加了项目的工具依赖。 |
再最新版的idea中都有自动捆绑该插件,如果没有无法使用lombok则在软件中添加即可
先引入Maven文件中的依赖:
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>>${lombok.version}version>
<scope>providedscope>
dependency>
对于lombok的注解,主要有如下:
import lombok.Getter;
import lombok.Setter;
public class MyClass {
@Getter
@Setter
private String name;
}
等价于:
public class MyClass {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
public class MyClass {
private String name;
private int age;
}
等价于:
public class MyClass {
private String name;
private int age;
public MyClass() {
// 无参构造方法
}
public MyClass(String name, int age) {
// 有参构造方法
this.name = name;
this.age = age;
}
}
@NoArgsConstructor :该注解使用在类上,提供无参构造
@Data :(包含了@Getter、@Setter、@ToString、@EqualsAndHashCode和@AllArgsConstructor的功能)
需要注意的是:同时使用 @Data 和 @AllArgsConstructor 后 ,默认的无参构造函数失效,如果需要它,要重新设置 @NoArgsConstructor
import lombok.Data;
@Data
public class MyClass {
private String name;
private int age;
}
log.info(xxxx);
@ToString :该注解使用在类上,编译后toString方法返回将会以字段的名称-值的形式输出
@EqualsAndHashCode :该注解使用在类上,同时生成 equals 和 hashCode 。
@NonNull :增加不为空判断
public NonNullExample(@NonNull Person person) {
this.name = person.getName();
}
转换为:
public NonNullExample(@NonNull Person person) {
if (person == null) {
throw new NullPointerException("person");
}
this.name = person.getName();
}
@Cleanup
InputStream in = new FileInputStream(args[0]);
@Cleanup
OutputStream out = new FileOutputStream(args[1]);
@SneakyThrows(Exception.class)
private final Object lock = new Object();
@Synchronized("lock")
public void foo() {
// Do something
}