lombok简单使用和原理介绍 - 1

lombok 的使用和简单原理分享

Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter(), setter()eques()方法,同时可以自动化日志变量。

1 如何使用

1.1. 添加maven依赖

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.4</version>
    <scope>provided</scope>
</dependency>

1.2 安装插件

使用Lombok 需要插件,idea中安装lombok插件
打开idea的设置,点击Plugins,点击Browse repositories,在弹出的窗口中搜索lombok,然后安装,
1.3
使用方法:

常用的lombok注解

@Data注解

/*
* @see Getter
 * @see Setter
 * @see RequiredArgsConstructor
 * @see ToString
 * @see EqualsAndHashCode
 * @see lombok.Value
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Data {
	String staticConstructor() default "";
}

Data注解相当于 对类 加上了@toString 、 @EqualAndHashCode、 @Getter、 @Setter 和 @RequiredArgsConstructor

注释一样。@Data = @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor

@NonNull注解

Getter & @Setter 注解

生成的所有 getters/setters 默认都是public的, 我们有时候需要屏蔽某个字段的访问级别
可以使用 AccessLevel枚举类 来设置字段的get/set级别。

public enum AccessLevel {
	PUBLIC, MODULE, PROTECTED, PACKAGE, PRIVATE,
	/** Represents not generating anything or the complete lack of a method. */
	NONE;
}

AccessLevel会覆盖Daat, GetSet等注解的public的级别

@NonNull注解

如果lombok为您生成整个方法或构造函数(例如@Data),Lombok总是将字段上通常称为@NonNull的各种注释视为生成空值检查的信号。但是,现在,在参数上使用lombok自己的@lombok.NonNull会导致在您自己的方法或构造函数中只插入null-check语句。

注解加载字段上, 就类似生成如下:

@NonNull
private String name;

public String getName() {
    if (name == null) {
        throw new NullPointerException();
    }
    return name;
}

@ToString

@ToString 注解用来替换掉生成 toString() 方法的实现,默认情况下,它会按顺序打印你的班级名称以及每个字段,并以逗号分隔。

想在toString()方法不打印某个字段, 使用@ToString.Exclude 来排除指定字段不会被 toString() 打印

lombok也支持 打印字段的优先级, 比如不打印父类的字段,修改打印的字段的顺序等功能。。。。。

@EqualsAndHashCode

任何类的定义都可以用@EqualsAndHashCode 标注,让 lombok 为其生成 equalshashCode 方法。默认情况下,将会用在非静态,非 transient 标记的字段上,但是你可以通过 @EqualsAndHashCode.Include@EqualsAndHashCode.Exclude标记类型成员来修改使用哪些字段,,

@NoArgsConstructor@RequiredArgsConstructor@AllArgsConstructor

@Data注解, 就包含的有@RequiredArgsConstructor注解,
那俩个都好理解,一个无参构造函数, 一个全参构造函数。

@RequiredArgsConstructor是每个需要特殊处理的字段生成一个带有1个参数的构造函数。所有未初始化的 final 字段都会获取一个参数,以及标记为@NonNull 的任何字段也会获取一个参数。这些字段在声明它们的地方没有初始化。对于这些标记为 @NonNull的字段,会生成特殊的null 编译检查。如果标记为 @NonNull的字段的参数为 null,那么构造函数将会抛出 NullPointerException

例如:

@Data
public class A {
    @NonNull
    private String name;
    private int num;
}

这样的类, A a = new A(); 编译无法通过, 因为RequiredArgsConstructor强制要求必须生成了带name的构造函数.

原创文章 132 获赞 23 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_33797928/article/details/98800286