Lombok pojo类小神器

379 查看

前言

Lombok主页

Lombok下载

Lombok引入项目之后,便可以使用 本文记录了在项目中应用Lombok时的使用案例,希望对朋友你有一些帮助。

  1. 可以去 下载jar包

  2. maven:

     <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
     <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <version>1.16.10</version>
     </dependency>
  3. gradle:

    // https://mvnrepository.com/artifact/org.projectlombok/lombok
    compile group: 'org.projectlombok', name: 'lombok', version: '1.16.10'

目前最新版本为1.16.10。

初学Lombok的使用时,建议配合Java的编译工具,便于理解Lombok在背后做的事情。


Lombok 安装

使用 lombok 是需要安装的,如果不安装,IDE 则无法解析 lombok 注解。先在官网下载最新版本的 JAR 包。

第一次使用的时候我下载的是最新版本的,也就是我现在用的1.16.10 目前版本更新很快。

1.双击下载下来的 JAR 包安装 lombok

我选择这种方式安装的时候提示没有发现任何 IDE,所以我没安装成功,我是手动安装的。如果你想以这种方式安装,请参考官网的视频。

2.eclipse 手动安装 lombok
(1). 将 lombok.jar 复制到eclipse.ini 所在的文件夹目录下
(2). 打开 eclipse.ini,在最后面插入以下两行并保存:

-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar

(3).重启 eclipse


Lombok好处在哪里?

没使用Lombok之前,定义JavaBean时,需要为每个成员定义getter/setter方法,无论手写或者自动生成,过程都不麻烦,但当Bean里的成员蛮多时,看代码的时候就比较心烦,无关的部分越来越多。随着项目的成长,代码的行数也奇迹般的增长,以至于项目经理在评估工作量时都要考虑适时的调整比率,麻烦呀。

@Data注解

通过在在class关键字前增加@Data,Lombok除了自动生成所有非final成员的getter/setter方法外,还有额外的福利,lombok同时生成了toString、equals、hashCode方法,并且完全符合规范,这样缩减了代码的规模,也少了手写toString/equals/hashCode方法的烦恼。

    @Data
    class Person
    {
        private String name;
        private int age;
        private String job;
        private Object info;
    }

@ToString注解

在调试代码时经常遇到一个问题,查看某个变量的值时,发现变量窗口展示的是一个奇怪的值(或者说对象在JVM内部表示的地址,这其实是toString方法的默认实现);想要查看对象内部各成员的值就需要逐层展开,这样才能看到内部的信息。类似的调试过程烦不胜烦,但对于定义了合适的toString方法的类的对象,调试时查看其内部成员的值则会简单许多,调试器会自动调用对象的toString方法,并将得到的字符串展示在变量值窗口,这无疑为调试带来了莫大便利。但手写toString方法其实非常麻烦,有过相关经历的朋友可能会深有体会。对于某个具体的类来说,出于安全或者性能或者其它方面的考虑,可能并不希望全部成员都出现在toString方法的返回值里。

    @ToString(exclude = { "age", "job" }, includeFieldNames = false, doNotUseGetters = true)  
    class Staff  
    {  
        private String name;  
        private int age;  
        private String job;  
        private Object info;  
    }  
      
    @ToString(callSuper = false)  
    class Student extends Staff  
    {  
        private String schoolName;  
        private int classNo;  
    }  

@EqualsAndHashCode

在项目开发过程中,虽然场景比较少,但仍然不可避免存在需要自定义equals或者hashCode方法的时候,当然这也是头疼的时候。根据《Effective Java》中的建议,equals方法和hashCode方法要同时实现,并且保证一致性。Lombok提供的@EqualsAndHashCode完美的解决了手写equals和hashCode方法时遇到的全部问题,不需要刻意关注底层的实现细节

    @EqualsAndHashCode(exclude = { "age", "job" }, doNotUseGetters = true)  
    class Staff  
    {  
        private String name;  
        private int age;  
        private String job;  
        private Object info;  
    }  
      
    @EqualsAndHashCode(callSuper = false)  
    class Student extends Staff  
    {  
        private String schoolName;  
        private int classNo;  
    }  

@Getter和@Setter

通过这两个注解,可以灵活控制是否为字段提供getter/settere方法,以及getter/setter方法的访问权限。由于使用非常简单,以后就不用看到一大堆的get set 啰。

    class Person
    {  
        @Getter  
        @Setter  
        private String name;  
      
        @Getter  
        private String schoolName;  
      
        @Setter  
        private int classNo;  
      
        @Getter(AccessLevel.MODULE)  
        private int age;  
      
        @Getter(AccessLevel.NONE)  
        private String job;  
      
        @Getter(AccessLevel.PRIVATE)  
        private Object info;  
    }