美文网首页
Lombok 常用注解

Lombok 常用注解

作者: almj | 来源:发表于2022-01-21 17:36 被阅读0次

    经常用 @Data 注解标记在实体类上面快速实现gettersetter, 而它好用地注解应该不至于这一个,下面是常用的注解汇总:
    1. @Data 注解 : 一般用在类上,提供类所有属性的 getset 方法,此外还提供了equalscanEqualhashCodetoString等方法;
    2. @Setter 注解:一般用在属性上,为属性提供 set 方法, 用在再类上则表示当前类中所有属性都生成set方法;
    3. @Getter 注解:用在属性上,为属性提供 get 方法, 用在再类上表示当前类中所有属性都生成get方法;
    4. @Log4j or @Slf4j 注解 :用在类上,为类提供一个 属性名为loglog4j日志对象;
    5. @NoArgsConstructor注解:用在类上,为类提供一个无参的构造方法;
    6. @AllArgsConstructor注解:用在类上,为类提供一个全参的构造方法;
    7. @RequiredArgsConstructor注解: 用在类上,生成一个包含 "特定参数" 的构造器,特定参数指的是那些有加上 final 修饰词的变量们;
    8. @Builder注解: 用在类上,自动生成流式 set 值写法,从此之后再也不用写一堆 setter 了;

    image.png

    注意,虽然只要加上 @Builder 注解,我们就能够用流式写法快速设定对象的值,但是 setter 还是必须要写不能省略的,因为 Spring 或是其他框架有很多地方都会用到对象的 getter/setter 对他们取值/赋值所以通常是 @Data@Builder 会一起用在同个类上,既方便我们流式写代码,也方便框架做事;
    9. @Cleanup注解: 可以用在 IO 流上,用于关闭并释放资源;
    例如下面例子,每次IO流操作后要在finally中关闭流,释放资源:

    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();
          }
        }
      }
    }
    

    类似以上的一个IO流操作的方法使用lombok 的 @Cleanup 注解后可以简化成这样:

    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);
            }
        }
    }
    
    1. @SneakyThrows 注解:利用了这一机制,将当前方法抛出的异常,包装成RuntimeException,骗过编译器,使得调用点可以不用显示处理异常信息,使用注解后不需要担心Exception的处理。例如:
    import lombok.SneakyThrows;
    
    public class SneakyThrowsExample implements Runnable {
      @SneakyThrows(UnsupportedEncodingException.class)
      public String utf8ToString(byte[] bytes) {
        return new String(bytes, "UTF-8");
      }
      
      @SneakyThrows
      public void run() {
        throw new Throwable();
      }
    }
    

    真正生成的代码

    import lombok.Lombok;
    
    public class SneakyThrowsExample implements Runnable {
      public String utf8ToString(byte[] bytes) {
        try {
          return new String(bytes, "UTF-8");
        } catch (UnsupportedEncodingException e) {
          throw Lombok.sneakyThrow(e);
        }
      }
      
      public void run() {
        try {
          throw new Throwable();
        } catch (Throwable t) {
          throw Lombok.sneakyThrow(t);
        }
      }
    }
    

    相关文章

      网友评论

          本文标题:Lombok 常用注解

          本文链接:https://www.haomeiwen.com/subject/ucxdgltx.html