`
朱秋旭
  • 浏览: 230649 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Lombok 之 Cleanup

阅读更多

LomBok 的相关目录已经整理出来,希望大家可以根据需求自助学习,好工具要大家分享:

@Cleanup     

@Getter, @Setter

@ToString

@EqualsAndHashCode

@Constructor

@Data & @Value

@SneakyThrows

@Synchronized

@Getter(lazy=true)

@Log

 

介绍一下Lombok中的Cleanup这个annotation , 他的方便之处,大家在代码中一睹风采:

 

使用前:

 

 

import java.io.*;

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

 

 

使用后:

 

 

import lombok.Cleanup;
import java.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);
    }
  }
}

 

 

单单从代码的行数上面就可以知道已经精简了不少,同时,代码的可读性也进一步提高。从代码中我们可以容易的看出,@Cleanup的作用就是在当前变量不在有效范围内的时候,对其进行自动的资源回收。在Java中的Stream上使用Cleanup Annotation,就是对其调用close方法。

 

但是,请大家注意,Cleanup 存在一个小问题:

官网给出了提示,如果你的代码中出现了异常,那么会触发cleanup方法抛出异常,导致把原始异常吞掉,这样就导致你在上层不知道发生了什么事情,这个事情很严重啊,但是如果说你是在调用close方法的时候出了异常,那么Cleanup这个annotation是不会把异常吞掉的。 同时,官网也指出,作业也没有找到更好的方式去解决这个问题,如果他们找到了会立刻fix这个问题,否则也就只能等待Java 有可能在Update的时候出现新的解决方案。

 

2
0
分享到:
评论
4 楼 w574240966 2014-10-03  
旭哥 涨姿势了。。。
3 楼 sundoctor 2014-10-02  
jdk 7

    import lombok.Cleanup;  
    import java.io.*;  
      
    public class CleanupExample {  
      public static void main(String[] args) throws IOException {  
        try( InputStream in = new FileInputStream(args[0]);  
       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);  
        }  
      }  
    }  
2 楼 朱秋旭 2014-10-02  
kjj 写道
java7 已经不需要这个了 try就可以

这个只是一个方面嘛,Lombok中有很多方便的功能还是值得借鉴的,同时,目前还会有很多企业跑的是JDK6的,所以Lombok还是有它的一些用途的
1 楼 kjj 2014-10-02  
java7 已经不需要这个了 try就可以

相关推荐

    lombok_lombok_源码.zip

    2. 注解(Annotations):Lombok 注解如 `@NonNull`、`@Cleanup`、`@NoArgsConstructor` 等,它们提供了简洁的代码表示方式,让代码更加清晰。例如,`@NonNull` 可以确保字段非空,`@Cleanup` 自动关闭资源,`@...

    lombok 插件idea 下载

    还有`@Cleanup`,它可以在使用后自动关闭资源,如数据库连接或文件流。 此外,Lombok还支持自定义生成的代码,通过`@Accessors`可以设置getter和setter的默认访问权限,或者使用链式调用。`@Builder`注解则可以创建...

    eclipse整合lombok文档

    Eclipse 整合 Lombok 文档 ...* @Cleanup:关闭流 * @Synchronized:对象同步 * @SneakyThrows:抛出异常 * @Log4j:log4j 日志声明 通过使用 Lombok,可以大大简化 Java 代码的编写,提高开发效率。

    lombok_lombok.zip

    7. `@Cleanup`:用于自动关闭流,类似于 Java 7 的 try-with-resources 语句,但适用于 Java 6 和更早版本。 8. `@Singular`:当字段是集合类型时,可以配合 `@Builder` 或 `@Data` 使用,生成带有单数形式的 add ...

    Lombok1.16.20.jar Lombok1.16.6.jar

    7. **@Cleanup**:这是一个实用的注解,用于自动关闭实现了AutoCloseable或Closeable接口的资源,如文件流,避免资源泄露。 8. **@Builder**:这个注解允许你创建一个构建者模式,使得创建复杂对象更加简单。 9. *...

    lombok.zip

    - `@Cleanup`:自动关闭流资源,如FileInputStream等,类似于try-with-resources语句。 3. **构造函数优化**: - `@Builder`:为类提供构建者模式,使得创建复杂对象更方便。 - `@Singular`:配合`@Builder`,在...

    Lombok1.16.20.jar

    6. **@Cleanup**: 自动关闭资源,如文件流,类似于Java 7的try-with-resources语句。 7. **@Log** (例如 @Log4j, @Log4j2, @SLF4J): 自动在类中注入日志对象,无需手动创建。 **在Eclipse中使用Lombok**: 在...

    Lombok资源jar包

    7. `@Cleanup`: 这个注解用于自动关闭流或者任何实现了`AutoCloseable`接口的对象,防止资源泄露。 在使用Lombok时,你需要在IDE中安装Lombok插件,并在项目构建配置中添加Lombok依赖。例如,在Maven项目中,你可以...

    lombok插件

    9. **@Cleanup**: 用于自动关闭资源,如数据库连接或文件流。当使用try-with-resources语句不方便时,这是一个很好的选择。 10. **@Builder**: 为类或字段生成建造者模式的实现,使得构建复杂对象更加方便。 使用...

    lombok-1.18.12.jar

    - `@Cleanup`:自动关闭流资源,类似于Java 7的try-with-resources语句。 - `@Synchronized`:同步方法或属性,提供线程安全。 - `@Builder`:提供构建者模式,使创建复杂对象变得更简单。 - `@Log4j`,`@Slf4j`...

    lombok文件jar包

    `@Cleanup` 注解可以帮助自动管理资源,如关闭流。 3. **访问控制**:`@Synchronized` 可以将方法或块同步,以避免并发问题。`@Getter(onMethod_ = @Override)` 可以强制生成的getter覆盖父类的方法。 4. **构建者...

    lombok.rar

    5. **其他注解**:除了上述的基本注解,Lombok还提供了一些高级特性,如`@NonNull`进行非空检查,`@Cleanup`自动关闭资源,`@Builder`用于构建器模式,`@Synchronized`同步方法,以及`@SneakyThrows`悄悄抛出异常等...

    lombok-plugin.zip

    5. `@Cleanup`:自动关闭流资源。 Lombok的使用可以极大地减少代码量,提高代码质量,并且减少了因为手动编写这些方法而可能导致的错误。此外,Lombok还提供了更多的高级功能,如自定义访问级别、构造函数注入、...

    lombok-plugin-0.34-2021.2.zip

    - `@Cleanup`: 自动关闭资源,类似于 try-with-resources 语句。 - `@Builder`: 支持链式构建器模式。 - `@Singular`: 在集合字段上使用,可以简化单个元素的添加操作。 使用 Lombok 的优点在于: - 代码更简洁,...

    lombok.jar.rar

    8. `@Cleanup`:自动关闭流,避免资源泄露,适用于实现了AutoCloseable接口的对象。 9. `@Builder`:允许以链式方式创建复杂对象,提供了一种构建者模式的便利实现。 10. `@Synchronized`:同步方法或属性,确保多...

    lombok插件-IDEA离线安装包

    Lombok还提供了其他注解,如`@NonNull`用于验证非空参数,`@Cleanup`自动关闭资源,`@Log`快速创建日志对象等,大大提升了开发效率。在实际项目中,合理使用Lombok能帮助开发者专注于业务逻辑,而不是琐碎的代码生成...

    最新 lombok 1.18.4.jar

    7. `@NonNull` 和 `@Cleanup`:前者用于标记非空字段,后者在使用后会自动关闭资源,如文件流。 Lombok 1.18.4 版本可能包含的改进和修复包括对新 JDK 版本的支持、与现有库的兼容性增强、编译速度优化以及对注解...

    Lombok代码生成

    LomBok主要特性有:自动生成默认的getter/setter方法、自动化的资源管理(通过@Cleanup注解)及注解驱动的异常处理等。目前在国外广泛应用。 LomBok它和jquery一样,目标是让程序员写更少的代码,以及改进一些原始语法...

Global site tag (gtag.js) - Google Analytics