• Lombok 安装、入门


    一、介绍

      lombok是一个帮助简化代码的工具,通过注解的形式例如@Setter @Getter,可以替代代码中的getter和setter方法,虽然eclipse自带的setter、getter代码生成也不需要我们手动的去敲写,但是使用@Setter @Getter这样的注解,能够使我们的代码看上去更加的简洁、优雅。

      官网:https://projectlombok.org/

      

    二、安装

       使用 lombok 是需要安装的,如果不安装,IDE 则无法解析 lombok 注解

    1、下载lombok插件

      官网:https://www.projectlombok.org/download

      百度云:

        链接:https://pan.baidu.com/s/1Z4sKHNUPGFhLMJs6rQ1oUg
        提取码:nmqc

    2、将下载的lombok.jar放在eclipse.ini同级目录下

    3、运行jar包(直接点击或者cmd命令:java -jar lombok.jar )

    4、选择编译器地址打钩,如果没有识别到电脑上的IDE可以点击下方的Specify location添加ide可执行文件路径

     

    5、 检查eclipse.ini文件中-javaagent:D:xxxlombok.jar地址是否有误(如果路径含中文会启动失败)

     6、重启eclipse,就发现能够正常使用啦

    三、使用

      注意:使用之前需要先按照以上步骤安装,在eclipse.ini配置

    1、引入依赖

      在pom.xml中添加如下依赖:

    <!-- 简化代码工具lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
    </dependency>

    2、常见注解解析

      Lombok的使用方法只需在对用类或方法添加对应注解即可

      在线官方文档:https://projectlombok.org/features/all

    (1)@Getter@Setter

      该注解使用在类或者属性上,该注解可以使用在类上也可以使用在属性上。生成的getter遵循布尔属性的约定。例如:boolean类型的Foo,getter方法为isFoo而不是getFoo在使用该注解时,会默认生成一个无参构造。和对应的getter, setter。

      关于boolean类型的数据,仔细看以下例子:

    package com.lemon.zuul.config;
    import lombok.Getter;
    import lombok.Setter;
    @Getter
    @Setter
    public class TestDemo {
      private String userName;
      private int userAge;
      private boolean userSex ;
      private boolean isLeader;
    }

      图中布尔类型为基本数据类型

      setter方法

      上图第一行为成员变量isLeader的setter方法,其中isLeader中的is不见了,下方第四行为成员变量userSex的setter方法,一切正常。

      getter方法

      长这样,get方法的生成规范是对于布尔基本数据类型是is+变量名,如果变量名包含了一个is那么也是只有一个is不会是isIsxxx。

      eclipse自动生成规则同上

      修改布尔变量为对应包装类

    package com.lemon.zuul.config;
    import lombok.Getter;
    import lombok.Setter;
    @Getter
    @Setter
    public class TestDemo {
      private String userName;
      private int userAge;
      private Boolean userSex ;
      private Boolean isLeader;
    }

      setter方法

       符合我们想要的

      getter方法

       也符合我们想要的

      总结:布尔类型为对应包装类时,setter、getter生成符合我们预期结果,而为基本数据类型时,get类的方法是以is开头。

    (2)@Data

      该注解使用在类上,该注解是最常用的注解,它结合了@ToString,@EqualsAndHashCode, @Getter和@Setter。本质上使用@Data注解,类默认@ToString@EqualsAndHashCode以及每个字段都有@Setter@getter。该注解也会生成一个公共构造函数,可以将任何@NonNullfinal字段作为参数。

      虽然@Data注解非常有用,但是它没有与其他注解相同的控制粒度。@Data提供了一个可以生成静态工厂的单一参数,将staticConstructor参数设置为所需要的名称,Lombok自动生成的构造函数设置为私有,并提供公开的给定名称的静态工厂方法。 

      注解示例:

    @Data(staticConstructor="of")
    public class Company {
        private final Person founder;
        private String name;
        private List<Person> employees;
    }

      等同于Java源代码:

    public class Company {
        private final Person founder;
        private String name;
        private List<Person> employees;
    
        private Company(final Person founder) {
            this.founder = founder;
        }
    
        public static Company of(final Person founder) {
            return new Company(founder);
        }
    
        public Person getFounder() {
            return founder;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(final String name) {
            this.name = name;
        }
    
        public List<Person> getEmployees() {
            return employees;
        }
    
        public void setEmployees(final List<Person> employees) {
            this.employees = employees;
        }
    
        @java.lang.Override
        public boolean equals(final java.lang.Object o) {
            if (o == this) return true;
            if (o == null) return false;
            if (o.getClass() != this.getClass()) return false;
            final Company other = (Company)o;
            if (this.founder == null ? other.founder != null : !this.founder.equals(other.founder)) return false;
            if (this.name == null ? other.name != null : !this.name.equals(other.name)) return false;
            if (this.employees == null ? other.employees != null : !this.employees.equals(other.employees)) return false;
            return true;
        }
    
        @java.lang.Override
        public int hashCode() {
            final int PRIME = 31;
            int result = 1;
            result = result * PRIME + (this.founder == null ? 0 : this.founder.hashCode());
            result = result * PRIME + (this.name == null ? 0 : this.name.hashCode());
            result = result * PRIME + (this.employees == null ? 0 : this.employees.hashCode());
            return result;
        }
    
        @java.lang.Override
        public java.lang.String toString() {
            return "Company(founder=" + founder + ", name=" + name + ", employees=" + employees + ")";
        }
    
    }

    (3)@NonNull

      该注解使用在属性上,该注解用于属的非空检查,当放在setter方法的字段上,将生成一个空检查,如果为空,则抛出NullPointerException。 该注解会默认是生成一个无参构造。 

      注解示例和Java源代码:

     (4)@EqualsAndHashCode

      该注解使用在类上,该注解在类级别注释会同时生成equalshashCode

      注解示例和Java源代码:

     (5)@toString

      该注解使用在类上,该注解默认生成字段以名称-值的形式输出。 

      注解示例和Java源代码:

     (6)@Value

      这个注解用在 类 上,会生成含所有参数的构造方法,get 方法,此外还提供了equals、hashCode、toString 方法。 没有setter 

    (7) @Log4j

      注解在类上;为类提供一个 属性名为log 的 log4j 日志对象

    (8)NoArgsConstructor

      注解在类上;为类提供一个无参的构造方法

    (9)AllArgsConstructor

      注解在类上;为类提供一个全参的构造方法

  • 相关阅读:
    database design
    django bulk create user
    mysql basic
    install mysql
    django apache httpd windows
    django apache httpd centos
    python mail smtplib
    compile c cpp with cl.exe in vim
    Remote Access to IPython Notebooks via SSH
    calculate traffic by snmpwalk for mrtg
  • 原文地址:https://www.cnblogs.com/javahr/p/13399114.html
Copyright © 2020-2023  润新知