lombok在IntelliJ IDEA下的使用

lombok是一款可以精减java代码、提升开发人员生产效率的辅助工具,利用注解在编译期自动生成setter/getter/toString()/constructor之类的代码。代码越少,意味着出bug的可能性越低。

官网地址:https://projectlombok.org/ 首页有一段几分钟的演示视频,看完就明白是怎么回事了。

先来二段对比代码:

这是用lombok后的java代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

import lombok.*;

import lombok.extern.slf4j.Slf4j;

import java.io.ByteArrayInputStream;

import java.io.*;

import java.util.ArrayList;

@Data

@Slf4j

@AllArgsConstructor

public class Something {

    private String name;

    private final String country;

    private final Object lockObj = new Object();

    public void sayHello(@NonNull String target) {

        String content = String.format("hello,%s", target);

        System.out.println(content);

        log.info(content);

    }

    public void addBalabala() {

        val list = new ArrayList<String>();

        list.add("haha");

        System.out.println(list.size());

    }

    @SneakyThrows(IOException.class)

    public void closeBalabala() {

        @Cleanup InputStream is = new ByteArrayInputStream("hello world".getBytes());

        System.out.println(is.available());

    }

    @Synchronized("lockObj")

    public void lockMethod() {

        System.out.println("test lock method");

    }

}

等效于下面这段java代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

import java.beans.ConstructorProperties;

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Collections;

import lombok.NonNull;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class Something {

    private static final Logger log = LoggerFactory.getLogger(Something.class);

    private String name;

    private final String country;

    private final Object lockObj = new Object();

    public void sayHello(@NonNull String target) {

        if(target == null) {

            throw new NullPointerException("target");

        else {

            String content = String.format("hello,%s"new Object[]{target});

            System.out.println(content);

            log.info(content);

        }

    }

    public void addBalabala() {

        ArrayList list = new ArrayList();

        list.add("haha");

        System.out.println(list.size());

    }

    public void closeBalabala() {

        try {

            ByteArrayInputStream $ex = new ByteArrayInputStream("hello world".getBytes());

            try {

                System.out.println($ex.available());

            finally {

                if(Collections.singletonList($ex).get(0) != null) {

                    $ex.close();

                }

            }

        catch (IOException var6) {

            throw var6;

        }

    }

    public void lockMethod() {

        Object var1 = this.lockObj;

        synchronized(this.lockObj) {

            System.out.println("test lock method");

        }

    }

    public String getName() {

        return this.name;

    }

    public String getCountry() {

        return this.country;

    }

    public Object getLockObj() {

        return this.lockObj;

    }

    public void setName(String name) {

        this.name = name;

    }

    public boolean equals(Object o) {

        if(o == this) {

            return true;

        else if(!(o instanceof Something)) {

            return false;

        else {

            Something other = (Something)o;

            if(!other.canEqual(this)) {

                return false;

            else {

                label47: {

                    String this$name = this.getName();

                    String other$name = other.getName();

                    if(this$name == null) {

                        if(other$name == null) {

                            break label47;

                        }

                    else if(this$name.equals(other$name)) {

                        break label47;

                    }

                    return false;

                }

                String this$country = this.getCountry();

                String other$country = other.getCountry();

                if(this$country == null) {

                    if(other$country != null) {

                        return false;

                    }

                else if(!this$country.equals(other$country)) {

                    return false;

                }

                Object this$lockObj = this.getLockObj();

                Object other$lockObj = other.getLockObj();

                if(this$lockObj == null) {

                    if(other$lockObj != null) {

                        return false;

                    }

                else if(!this$lockObj.equals(other$lockObj)) {

                    return false;

                }

                return true;

            }

        }

    }

    protected boolean canEqual(Object other) {

        return other instanceof Something;

    }

    public int hashCode() {

        boolean PRIME = true;

        byte result = 1;

        String $name = this.getName();

        int result1 = result * 59 + ($name == null?0:$name.hashCode());

        String $country = this.getCountry();

        result1 = result1 * 59 + ($country == null?0:$country.hashCode());

        Object $lockObj = this.getLockObj();

        result1 = result1 * 59 + ($lockObj == null?0:$lockObj.hashCode());

        return result1;

    }

    public String toString() {

        return "Something(name=" this.getName() + ", country=" this.getCountry() + ", lockObj=" this.getLockObj() + ")";

    }

    @ConstructorProperties({"name""country"})

    public Something(String name, String country) {

        this.name = name;

        this.country = country;

    }

}

大概减少了2/3的代码,各种注解的详细用法,请参考:https://projectlombok.org/features/index.html

IDEA下使用时,可以通过插件的形式安装,插件下载地址:https://github.com/mplushnikov/lombok-intellij-plugin/releases

然后

Plugins -> Install plugin from disk... 选择下载的zip包安装,重启idea即可。

另外,还有一个关键设置:

为了让设置生效,建议再重启一次idea,然后就可以开心的编码了,可以ide里可以直接看到生成的方法:(下图中打红圈的都是自动生成的)

  

时间: 2024-11-09 23:26:29

lombok在IntelliJ IDEA下的使用的相关文章

第9节课笔记-彻底实战IntelliJ IDEA 下的Spark程序开发

彻底实战IntelliJ IDEA 下的Spark程序开发下载IntelliJ IDEA 下载gitSpark源码下载:git clone git://github.com/apache/spark.git导入maven 工程 IntelliJ IDEA 启动的向导中Sacal下载需要下载,这是IDEA下载的,和系统层的不一样4.指定JDK1.8.x和Scala2.10.45.file ->Project Stucture 来设置工程lib 核心是添加Spark的jar6.添加Spark jar

(转)IntelliJ IDEA下的使用git

1.git简介 Git是目前流行的分布式版本管理系统.它拥有两套版本库,本地库和远程库,在不进行合并和删除之类的操作时这两套版本库互不影响.也因此其近乎所有的操作都是本地执行,所以在断网的情况下任然可以提交代码,切换分支.git又使用了SHA-1哈希算法确保了在文件传输时变得不完整.磁盘损坏导致数据丢失时能立即察觉到. git的基本工作流程: git clone:将远程的Master分支代码克隆到本地仓库 git checkout:切出分支出来开发 git add:将文件加入库跟踪区 git c

IntelliJ IDEA 下的版本控制介绍

不管是个人开发或是团队开发,版本控制都是可以很好地被使用的,目前我找不到任何开发者不使用版本控制的理由.而且对于 IDE 来讲,集成版本控制的本身就是它最大的亮点之一,很多开发者也是为此而使用它. 在本章节中也会对 IntelliJ IDEA 的相关版本控制进行了介绍,会开始涉及到一些 IntelliJ IDEA 人性化设置,也希望你能从这一讲开始认识到 IntelliJ IDEA 的优雅. 很多人认为 IntelliJ IDEA 自带了 SVN 或是 Git 等版本控制工具,认为只要安装了 I

Intellij IDEA下的第一个Hibernate项目

参考:intellij配置hibernate自动生成hbm.xml文件     从零开始用Intellij idea14创建hibernate项目 下面我要讲的创建方式,可能更加原生态,更加类似于Eclipse下创建Hibernate项目的方式,我想这也有助于对在Intellij IDEA下创建Hibernate项目的理解. 首先需要在Intellij IDEA下创建一个项目Project,相当于Eclipse下的workspace(工作空间),当然如果你此时选择了创建Hibernate项目的方

在intelliJ IDEA下搭建pomelo详解

1:安装 pomelo,我们这里选择采取全局安装,这样任何时候都可以使用了. npm install -g pomelo 2:试试 pomelo 安装是否ok pomelo --help 一切就绪之后我们就来看看具体的开发过程吧: 3:开始进行开发,这里我在本地任意的一个文件夹下新建一个项目名,这里我在D:\nodePro下新建一个pomeloTest文件.然后运行如下命令 pomelo init pomelo_demo 这个就会创建基本的pomelo的一个小的demo开发环境,包括 game-

IntelliJ IDEA下的使用git

1.git简介 git是目前流行的分布式版本管理系统.它拥有两套版本库,本地库和远程库,在不进行合并和删除之类的操作时这两套版本库互不影响.也因此其近乎所有的操作都是本地执行,所以在断网的情况下任然可以提交代码,切换分支.git又使用了SHA-1哈希算法确保了在文件传输时变得不完整.磁盘损坏导致数据丢失时能立即察觉到. git的基本工作流程: git clone:将远程的Master分支代码克隆到本地仓库 git checkout:切出分支出来开发 git add:将文件加入库跟踪区 git c

IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结

首先,使用的时候,自己得先在电脑上安装个小乌龟.也就是svn啦. 第一步安装小乌龟. 如下: 具体安装好像没什么具体要求,一路next,就好. 如上图箭头所示,在安装 TortoiseSVN 的时候,默认 command line client tools,是不安装的,这里建议勾选上. 这个我不确定我当时选没选,不过呢,你给安装上,也是没问题的. 把上面的勾选取消了,就可以应对下面的这个错误.看图. 安装OK之后,确保你这个编辑器也已经激活成功,那么下一步开始 第二步,导出. 从svn上chec

Intellij IDEA下远程调试hadoop

最近在开发新的MapReduce程序时,经常要打jar包上传到服务器,然后运行hadoop jar      balaba...... 看到网上都是在Eclipse下调试hadoop集群中MapReduce程序,而且描述的都是模模糊糊,有些根本就是错的,实在不忍心直视,其中有一篇关于idea下调试hadoop集群程序的博客,被疯狂转载,可是仔细看看,根本没用,因为他的平台是Linux. 使用Intellij IDEA+maven的开发hadoop的同学,如果想在本地直接运行,不去上传jar包,可

IntelliJ IDEA下Maven SpringMVC+Mybatis入门搭建例子

很久之前写了一篇SSH搭建例子,由于工作原因已经转到SpringMVC+Mybatis,就以之前SSH实现简单登陆的例子,总结看看SpringMVC+Mybatis怎么实现. Spring一开始是轻量级的框架,在SSH中,处于中间粘合剂的作用,核心作用是IoC(控制反转).DI(依赖注入),IoC和DI是同一个概念,只是以不同角度进行解释.简单的说,就是Spring帮助你管理Bean,只要写好了配置文件或者Spring注解,那么Spring可以自动帮你创建Bean,不需要手动new.经过后来的发