zoukankan      html  css  js  c++  java
  • Lombok基本使用

    1. Lombok 是什么

    • 官网:https://projectlombok.org/

    • Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

    • 白话:Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 中的冗长代码,尤其是对于简单的 Java 对象(POJO),它通过注解实现这一目的。

    • 简化 JavaBean 开发

    <dependency>
    	<groupId>org.projectlombok</groupId>
    	<artifactId>lombok</artifactId>
    </dependency>
    
    • idea中搜索安装lombok插件
      在这里插入图片描述
    • Lombok @Data 注解
    • 按快捷键 Alt+7就能显示当前类中的所有方法、全局常量,方法还包括形参和返回值
    • 或 view—>Tool Windows —>Structure—>点击

    在这里插入图片描述

    2. Lombok原理

    • JSR 269:插件化注解处理API(Pluggable Annotation Processing API)
    • 官网: https://www.jcp.org/en/jsr/detail?id=269
      JDK6提供的特性,在 Javac编译期利用注解
      在这里插入图片描述
    • 查看编译后的 User.class
      在这里插入图片描述
    • 原理实现流程图
      在这里插入图片描述

    3. Lombok 常用注解

    在这里插入图片描述

    1. @Getter 和 @Setter 方法

    • 测试 @Setter 注解
      User.java
      在这里插入图片描述
      User.class
      在这里插入图片描述

    • 测试 @Getter(AccessLevel.PROTECTED) 注解,默认是 public ,可以设置不同方法的级别
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    • 给所有变量添加set、get方法,直接在类中注解
      在这里插入图片描述

    • 注意:

      1. lombok不会对 static 修饰的变量产生set、get方法
      2. lombok对 final 修饰的字符不会产生 set 方法
        在这里插入图片描述
        在这里插入图片描述
    • 自定义变量不生成 set、get方法
      在这里插入图片描述
      在这里插入图片描述

    2. @ToString 方法

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 自定义排除某些字段的ToString 方法
      在这里插入图片描述
      在这里插入图片描述

    3. @EqualsAndHashCode

    在这里插入图片描述

    • 自定义排除某些字段的 EqualsAndHashCode方法
      在这里插入图片描述

    4. @NonNull

    • 作用:注解的作用就是在方法中做了一次不为空的判断
    • 案例:
    public void test(@NonNull String s){
            System.out.println(s);
    }
    public static void main(String[] args) {
            User user = new User();
            user.test(null);
        }
    
    • 结果:空指针
      在这里插入图片描述
    • 查看编译后的源代码:
    public void test(@NonNull String s) {
            if (s == null) {
                throw new NullPointerException("s is marked non-null but is null");
            } else {
                System.out.println(s);
            }
        }
    
    • 也可以使用在构造函数里,也可以在字段中添加注解
    @NotNull private Integer id;
    

    5. @NoArgsConstructor 和 @RequiredArgsConstructor、 @AllArgsConstructor

    • @NoArgsConstructor,添加无参构造方法
      在这里插入图片描述
      在这里插入图片描述

    • @RequiredArgsConstructor,指定部分有参构造,默认会找标识了 @NonNull 的变量添加构造方法,或标识了 final 修饰的变量且没有赋予初始值添加构造方法
      在这里插入图片描述
      在这里插入图片描述

    • @AllArgsConstructor,生成所有成员变量的构造方法
      在这里插入图片描述
      在这里插入图片描述

    6. @Data

    • 作用于类上,是以下注解的集合:@ToString ,@EqualsAndHashCode ,@Getter, @Setter @RequiredArgsConstructor

    7. @Builder

    • 以字段名为方法名构造一系列的方法,而且方法返回的对象是UserBuilder

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    8. @Log

    • @Log:作用于类上,生成日志变量。针对不同的日志实现,有不同的注解:

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    9. val

    HashMap<String,String> map = new HashMap<String,String>();
    

    简化的写法

    val map = new HashMap<String,String>();
    
    public static void main(String[] args) {
        val sets = new HashSet<String>();
        val lists = new ArrayList<String>();
        val maps = new HashMap<String, String>();
        //=>相当于如下
        final Set<String> sets2 = new HashSet<>();
        final List<String> lists2 = new ArrayList<>();
        final Map<String, String> maps2 = new HashMap<>();
    }
    

    10. @Cleanup

    • 用于关闭并释放资源,可以用在 IO 流上;
    public class CleanupExample {
        public static void main(String[] args) throws IOException {
            @Cleanup InputStream in = new FileInputStream(args[0]);
            @Cleanup OutputStream out = new FileOutputStream(args[1]);
            byte[] b = new byte[10000];
            while (true) {
                int r = in.read(b);
                if (r == -1) break;
                out.write(b, 0, r);
            }
        }
    }
    
    • 上面相当与如下传统的 Java 代码:
    public class CleanupExample {
      public static void main(String[] args) throws IOException {
        InputStream in = new FileInputStream(args[0]);
        try {
          OutputStream out = new FileOutputStream(args[1]);
          try {
            byte[] b = new byte[10000];
            while (true) {
              int r = in.read(b);
              if (r == -1) break;
              out.write(b, 0, r);
            }
          } finally {
            if (out != null) {
              out.close();
            }
          }
        } finally {
          if (in != null) {
            in.close();
          }
        }
      }
    }
    

    4. 总结

    在这里插入图片描述

    本文来自博客园,作者:兮动人,转载请注明原文链接:https://www.cnblogs.com/xdr630/p/15254758.html

  • 相关阅读:
    Daily Scrumming 2015.10.20(Day 1)
    Buaaclubs项目介绍
    [转载] Linux创建用户后,切换用户报This account is currently not available
    NetFPGA-1G-CML从零开始环境配置
    Digilent Xilinx USB Jtag cable
    OVS流表table之间的跳转
    Linux换源
    Scapy安装以及简单使用
    Do in SDN
    KMP算法
  • 原文地址:https://www.cnblogs.com/xdr630/p/15254758.html
Copyright © 2011-2022 走看看