zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    C#磁吸屏幕窗体类库
    准备
    我写的诗
    How to turn off a laptop keyboard
    How to tell which commit a tag points to in Git?
    Why should I care about lightweight vs. annotated tags?
    How to get rid of “would clobber existing tag”
    Facebook, Google and Twitter threaten to leave Hong Kong over privacy law changes
    The need for legislative reform on secrecy orders
    Can a foreign key be NULL and/or duplicate?
  • 原文地址:https://www.cnblogs.com/javahr/p/13399114.html
Copyright © 2011-2022 走看看