lombok用法

一、Lombok

Lombok 是一个 Java 库,它可以帮助开发者减少在 Java 中编写那些繁琐的“boilerplate”代码的工作量。所谓“boilerplate”代码是指那些重复性的、模板化的代码,例如 getter、setter、构造函数、equals 和 hashCode 方法等。使用 Lombok 可以通过简单的注解来代替这些手动编写的代码。

二、Lombok的使用方法

添加Lombok

要在 Maven 或 Gradle 项目中添加 Lombok 依赖,你需要在项目的构建文件中加入相应的依赖声明。

对于 Maven 项目:

打开你的 pom.xml 文件。

在 <dependencies> 标签内添加如下依赖:

<dependency>

    <groupId>org.projectlombok</groupId>

    <artifactId>lombok</artifactId>

    <version>最新版本号</version>

    <!-- 检查是否需要排除特定的依赖 -->

    <scope>provided</scope>

</dependency>

对于 Gradle 项目:

打开你的 build.gradle 文件。

在 dependencies 块中添加如下依赖:

dependencies {

    // 使用提供的编译范围,因为在运行时不需要 lombok

    compileOnly 'org.projectlombok:lombok:最新版本号'


    // 如果你的 IDE 不是 IntelliJ IDEA, 你可能需要下面这个注解处理器

    annotationProcessor 'org.projectlombok:lombok:最新版本号'

}

注意事项:

如果你在使用 IntelliJ IDEA,那么它已经内置了对 Lombok 的支持,因此不需要额外的配置。

如果你在使用 Eclipse,可能需要安装 Lombok 插件来获得对 Lombok 注解的支持。可以访问 Eclipse Marketplace 并搜索 "Lombok" 来安装。

确保你的 IDE 已经配置好 Lombok,以便能够正确识别和处理 Lombok 注解。

当使用 Lombok 时,确保你的编译器支持注解处理(如 javac 的 -parameters 选项),这样可以避免某些情况下出现的问题。

安装Lombok插件

对于 IntelliJ IDEA:

打开设置界面

在 Windows 或 Linux 上,选择 File > Settings。

在 macOS 上,选择 IntelliJ IDEA > Preferences。

导航到 Plugins 面板

在设置窗口中,选择 Plugins。

安装 Lombok 插件

点击 Marketplace 按钮或 Browse repositories...。

在搜索框中输入 Lombok 并回车。

从结果列表中选择 Lombok 插件。

点击 Install 按钮来安装插件。

安装完成后,重启 IntelliJ IDEA。

对于 Eclipse:

打开帮助菜单

在 Eclipse 菜单栏中选择 Help。

访问市场

选择 Eclipse Marketplace...。

搜索并安装 Lombok 插件

在搜索框中输入 Lombok 并回车。

选择 Lombok 插件并点击 Go。

点击 Install 按钮。

遵循安装向导的指示完成安装过程。

安装完成后,可能需要重新启动 Eclipse。

使用Lombok注解

示例类

假设我们有一个简单的 Java 类,如下所示:

public class Person {

    private String name;

    private int age;

    private boolean active;

}

使用 Lombok 注解

1. @Getter 和 @Setter

这两个注解分别用于自动生成 getter 和 setter 方法。它们可以作用于类级别或单独的字段级别。

import lombok.Getter;

import lombok.Setter;

@Getter

@Setter

public class Person {

    private String name;

    private int age;

    private boolean active;

}

2. @NoArgsConstructor 和 @AllArgsConstructor

这些注解用于生成无参构造器和包含所有非静态非 final 字段的构造器。

import lombok.AllArgsConstructor;

import lombok.NoArgsConstructor;

@NoArgsConstructor

@AllArgsConstructor

public class Person {

    private String name;

    private int age;

    private boolean active;

}

3. @ToString

此注解用于生成toString()方法,该方法会返回类中所有字段的信息。

import lombok.ToString;

@ToString

public class Person {

    private String name;

    private int age;

    private boolean active;

}

4. @EqualsAndHashCode

此注解用于生成equals()和hashCode()方法。可以指定哪些字段参与比较。

import lombok.EqualsAndHashCode;

@EqualsAndHashCode(of = {"name", "age"})

public class Person {

    private String name;

    private int age;

    private boolean active;

}

5. @Data

@Data是一个组合注解,它包含了@ToString,@EqualsAndHashCode,@Getter/@Setter,@RequiredArgsConstructor的功能。

import lombok.Data;

@Data

public class Person {

    private String name;

    private int age;

    private boolean active;

}

6. @Value

@Value创建一个不可变类,所有字段默认是final并且会被初始化。

import lombok.Value;

@Value

public class Person {

    private String name;

    private int age;

    private boolean active;

}

7. @Builder

@Builder提供了一个流畅的构造方式来创建对象实例。

import lombok.Builder;

@Builder

public class Person {

    private String name;

    private int age;

    private boolean active;

}

// 使用示例

Person person = Person.builder()

                    .name("张三")

                    .age(30)

                    .active(true)

                    .build();

注意事项

在使用 Lombok 时,请确保你的 IDE 已经安装了 Lombok 插件,并且项目中已经正确配置了 Lombok 依赖。

有时候 IDE 可能无法立即识别 Lombok 生成的方法,此时可以尝试重启 IDE 或者重新编译项目。

使用 @Data 注解时要小心,因为它会自动为所有字段生成 getter 和 setter,这可能导致意外地修改类的状态。如果需要不可变对象,考虑使用 @Value。

三、Lombok语法

常用注解及语法

1. @Getter 和 @Setter

作用:生成 getter 和 setter 方法。

语法:可以作用于类级别或字段级别。

import lombok.Getter;

import lombok.Setter;

public class Person {

    @Getter @Setter

    private String name; // 自动生成 getName() 和 setName(String)

    @Getter // 只生成 getter

    private int age; // 自动生成 getAge()

    private boolean active; // 默认无 getter 或 setter

}

2. @NoArgsConstructor 和 @AllArgsConstructor

作用:生成无参构造器和包含所有非静态非 final 字段的构造器。

语法:作用于类级别。

import lombok.Getter;

import lombok.Setter;

public class Person {

    @Getter @Setter

    private String name; // 自动生成 getName() 和 setName(String)

    @Getter // 只生成 getter

    private int age; // 自动生成 getAge()

    private boolean active; // 默认无 getter 或 setter

}

2. @NoArgsConstructor 和 @AllArgsConstructor

作用:生成无参构造器和包含所有非静态非 final 字段的构造器。

语法:作用于类级别。

import lombok.AllArgsConstructor;

import lombok.NoArgsConstructor;

@NoArgsConstructor // 生成无参构造器

@AllArgsConstructor // 生成包含所有字段的构造器

public class Person {

    private String name;

    private int age;

    private boolean active;

}

3. @ToString

作用:生成 toString() 方法。

语法:作用于类级别。


import lombok.ToString;

@ToString

public class Person {

    private String name;

    private int age;

    private boolean active;

}

4. @EqualsAndHashCode

作用:生成 equals() 和 hashCode() 方法。

语法:作用于类级别,可以指定参与比较的字段。

import lombok.EqualsAndHashCode;

@EqualsAndHashCode(of = {"name", "age"}) // 指定 name 和 age 参与比较

public class Person {

    private String name;

    private int age;

    private boolean active;

}

5. @Data

作用:组合注解,相当于 @ToString, @EqualsAndHashCode, @Getter / @Setter, @RequiredArgsConstructor。

语法:作用于类级别。

import lombok.Data;

@Data // 组合注解

public class Person {

    private String name;

    private int age;

    private boolean active;

}

6. @Value

作用:创建一个不可变的类,所有字段默认是 final 并且会被初始化。

语法:作用于类级别。

import lombok.Value;

@Value // 创建不可变对象

public class Person {

    private String name;

    private int age;

    private boolean active;

}

7. @Builder

作用:提供流畅的构造方式来创建对象实例。

语法:作用于类级别。

import lombok.Builder;

@Builder

public class Person {

    private String name;

    private int age;

    private boolean active;

}

// 使用示例

Person person = Person.builder()

                    .name("张三")

                    .age(30)

                    .active(true)

                    .build();

其他注解

除了上述注解外,还有一些其他有用的注解:

@NonNull:标记字段为非空,通常与 @AllArgsConstructor 或 @Builder 结合使用。

@Log 或 @Log4j:生成日志对象。

@Singular:用于集合类型的字段,允许在构造时使用加法操作符添加元素。

示例代码

下面是一个结合多个注解的示例:

import lombok.*;

@NoArgsConstructor

@AllArgsConstructor

@Data

@Builder

public class Person {

    @NonNull

    private String name;

    private int age;

    private boolean active;

    @Singular

    private List<String> hobbies;

}

在这个示例中,@Data 注解提供了大部分基本功能,@NoArgsConstructor 和 @AllArgsConstructor 分别生成了无参构造器和全参数构造器,@Builder 则提供了构造者的便利性,而 @NonNull 和 @Singular 用于进一步定制构造逻辑。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容