将旧对象装箱可自动关闭

从Java 7开始,我们可以使用try-with-resources并自动关闭任何实现Autocloseable接口的对象。 如果资源 Autocloseable 。 一些类需要一些总结,但不是Autocloseable 。 这些主要是某些遗留框架中的旧类,仍然妨碍我们前进。 没有人再使用Struts了,但是仍然有足够多的旧框架潜伏在黑暗中,我们必须使用它们。 我最近有这种经验,而且我非常有动力,所以我创建了一个简单的AutoCloser类。

我们可能有一个遗留类(在示例中,这是测试类的模拟内部类)

 public class NotAutoclosable { public NotAutoclosable() { opened = true ; } public void dispose() { opened = false ; } } 

顾名思义,它不是自动关闭的。 它没有实现Autocloseable接口,并且没有close()方法。 必须调用适当命名的方法dispose()来处置它。 ( openedboolean字段用于稍后在单元测试中进行检查,以断言AutoCloser类的正确功能。)

该类的用法如下:

 @Test void test() { final NotAutoclosable notAu; try ( final var s = AutoCloser.useResource( new NotAutoclosable()) .closeWith(sp -> sp.get().dispose())) { Assertions.assertTrue(opened); } Assertions.assertFalse(opened); } 

我们使用内部类的构造函数创建资源,并定义将“关闭”资源的Consumer 。 该使用者将获得与变量s存储的相同的Supplier

旁注:此函数参数必须是使用者,并且不能使用变量s成为Runnable ,因为在将lambda表达式评估为lambda表达式时,不会初始化该变量。 当将要使用它时,它已经被定义了,但是对于Java编译器来说为时已晚,它并不那么信任程序员,通常情况下,它有充分的理由做到这一点。

AutoCloser类如下:

 public class AutoCloser<T> { private final T resource; private AutoCloser(T resource) { this .resource = resource; } public static <T> AutoCloser<T> useResource(T resource) { return new AutoCloser<>(resource); } public AutoClosableSupplier closeWith(Consumer<Supplier<T>> closer){ return new AutoClosableSupplier(closer); } public class AutoClosableSupplier implements Supplier<T>, AutoCloseable { private final Consumer<Supplier<T>> closer; private AutoClosableSupplier(Consumer<Supplier<T>> closer) { this .closer = closer; } @Override public T get() { return resource; } @Override public void close() { closer.accept( this ); } }  } 

之所以使用内部的AutoClosableSupplier类,是因为我们不希望程序员意外忘记指定最终将关闭资源的lambda。

这真的没有什么严重的。 这只是一种编程风格,它类似于Go语言中的deferred语句,将资源的关闭移到了资源的打开处。

翻译自: https://www.javacodegeeks.com/2019/05/box-old-objects-autoclosable.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】国家开放大学2018年秋季 7404-22T数学建模 参考试题

编号&#xff1a;8044 座位号 2018&#xff5e;2019学年度第1学期期末考试 植物病虫害防治基础试题 2019年 1月 一、名词解释 &#xff08;5小题&#xff0c;每题5分&#xff0c;共25分&#xff09; 非传染性病害 抗病性 物理机械防治 植物检疫 年生活史 二、单项选择题…

六种常用的物联网通信协议

本文来自&#xff1a;http://www.ebyte.com/ 随着现在物联网设备的数量不断的增加&#xff0c;这些设备之间的通信连接也成了一个值得我们思考的课题。据预测&#xff0c;到2020年物联网的设备数量将达到204亿台。我们常用的物联网通信协议有很多种&#xff0c;它们具备着不同…

linux 怎么添加path环境变量,Linux下怎么添加和查看PATH环境变量

linux下查看和添加PATH环境变量来自&#xff1a;http://apps.hi.baidu.com/share/detail/32942984$PATH&#xff1a;决定了shell将到哪些目录中寻找命令或程序&#xff0c;PATH的值是一系列目录&#xff0c;当您运行一个程序时&#xff0c;Linux在这些目录下进行搜寻编译链接。…

【渝粤教育】国家开放大学2018年秋季 8669-21T (1)政治经济学 参考试题

试卷代号&#xff1a;0007 座位号 2018——2019学年度第一学期期末考试 文 书 档 案 管 理 试 题 2019年1月 1&#xff0e;公务文书是 的主体。 2&#xff0e;公文的正文部分一般包括 、 、 、附件、 、 、机关印章。 3&#xff0e;按公务文书的性质及其使用范围的不同划分&a…

智能插座常用的两种通信协议——WIFI和ZigBee

随着科技技术的不断发展&#xff0c;智能家居的概念不断的深入人心&#xff0c;人们利用智慧不断开创新的生活。比尔盖茨是第一个智能家居的使用者&#xff0c;也许很多人都会认为智能家居是高端的设备&#xff0c;只有想比尔盖茨那样的有钱人才能够使用&#xff0c;其实不然&a…

以太网交换机坏了,能否用光纤收发器来替代?

近期&#xff0c;有朋友在后台咨询我们&#xff1a;现有的以太网交换机坏了&#xff0c;能否用光纤收发器来替代&#xff1f;相信很多朋友都有过这样的疑问&#xff0c;答案肯定是否&#xff0c;我们不建议大家用光纤收发器替代以太网交换机来使用&#xff01;因为以太网交换机…

javafx canvas_JavaFX技巧1:可调整大小的Canvas

javafx canvas在使用FlexGanttFX时&#xff0c;我不得不处理很多JavaFX Canvas节点。 我正在使用它在时间轴上呈现活动。 甘特图中的每一行都是一个Canvas节点。 用户可以选择单独调整每行的大小。 因此&#xff0c;我不得不找出调整画布大小的最佳方法&#xff0c;这种现成的方…

【渝粤教育】国家开放大学2019年春季 0341-22T高级英语听力(2) 参考试题

试卷代码&#xff1a;0341 2018-2019学年度第二学期期末考试 高级英语听力&#xff08;2&#xff09;试题 2019年7月 注 意 事 项 一、将你的准考证号、学生证号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸规定栏内。 考试结束后&#xff0c;把试卷和答题纸放…

linux 软件 名称 更新,linux软件版本管理命令update-alternatives使用详解

linux软件版本管理命令update-alternatives使用详解update-alternatives 命令用于处理linux系统中软件版本的切换&#xff0c;在各个linux发行版中均提供了该命令&#xff0c;命令参数略有区别&#xff0c;但大致是一样的。1、 注册软件以jdk为例&#xff0c;安装了jdk以后&…

物联网技术应用案例

物联网应用的真正价值远远不至于联网小工具和智能冰箱。物联网的不断发展下&#xff0c;物联网应用正在不断的帮公司提高效率&#xff0c;降低成本并推动收入的增长。 但是&#xff0c;虽然您可能会想到很多的比较典型的物联网应用方案&#xff0c;比如常见的工业自动化和农业中…

【渝粤教育】国家开放大学2019年春季 0736-22T烹饪工艺学(2) 参考试题

科目编号&#xff1a;[0736] 座位号 2018-2019学年度第二学期期末考试 烹饪工艺学&#xff08;2&#xff09; 试题 2019年 4 月 一、名词解释&#xff08;本大题共5小题&#xff0c;每小题4分&#xff0c;共计20分&#xff09; 1.热增耗 2&#xff0e;烧 3&#xff0e;上浆工…

【渝粤教育】国家开放大学2019年春季 1062文学英语赏析 参考试题

试卷代号&#xff1a;1062 2 0 1 9年春季学期期末统一考试 文学英语赏析试题 2019年7月 注意事项 一、将你的学号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸的规定栏内。考试结束后&#xff0c;把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人收…

工业级4G无线路由器有哪些特点如何选择

工业级4G无线路由器因其具性能高。传输速度快且数据处理能力强等这些比较突出的特点&#xff0c;在电力、交通、金融、工控等各大行业中都有着广泛的应用&#xff0c;并受到了人们高度推崇和青睐。那么&#xff0c;工业级4G无线路由器有那些的特点受到消费者的青睐呢&#xff1…

3分钟看懂工业交换机EMS试验和高低温测试

机子行不行&#xff0c;全靠试验评。上期IES6312的开箱视频中提到&#xff0c;我们该如何确定产品的稳定和可靠性&#xff0c;本期就是12口全千兆二层网管型工业以太网交换机系列测试视频&#xff0c;全视频一共做了4项试验&#xff1a;高低温测试、EMS试验三个&#xff08;静电…

测试双打简介

在编写单元测试时&#xff0c;您会遇到许多协作者&#xff0c;并且他们都有非常特殊的行为&#xff0c;知道在正确的时间必须使用哪种测试两倍可以使您的生活更轻松。 假 第一个是Dummy对象&#xff0c;它是最简单的一个&#xff0c;Dummy只是您为满足构造函数而传递的对象&am…

NB-IoTDTU对比于3G/4G DTU的区别和优势

作为物联网领域的新兴技术&#xff0c;低功耗广域网技术NB-IOT自2016年问世以来&#xff0c;围绕着其开展的技术研发和市场布局也在高速的发展中。而曾占据历史舞台的传统的基于移动网络的3G/4G DTU也依然活跃在人们的眼中&#xff0c;那么新兴的NB-IOT DTU和3G/4G DTU有哪些区…

【渝粤教育】国家开放大学2019年春季 1161开放英语3 参考试题

科目编号&#xff1a;1161 座位号&#xff1a; 2018-2019学年第二学期期末考试 开放英语3 试题(闭卷) 2019年7月 I. 交际用语(共计10分&#xff0c;每小题 2分&#xff09; 阅读下面的小对话&#xff0c;从A、B、C三个选项中选出一个能填入空白处的最佳选项&#xff0c; 并在答…

linux 中文ssid 显示,无法连接中文 SSID 的 Wi-Fi?简单几步就搞定!

忙里偷闲&#xff0c;今天把树莓派拿出来准备搞点事情&#xff0c;但发现宿舍的中文 SSID 无法被树莓派正确识别&#xff0c;变成了一堆 16 进制数&#xff1a;虽然如此&#xff0c;但我猜测只是显示上的问题&#xff0c;猜得出是哪个 Wi-Fi&#xff0c;剩下应该就没什么问题了…

安防专用交换机的应用介绍

安防专用交换机作为特别类型的交换机,最近几年&#xff0c;由于监控行业的迅速普及与应用&#xff0c;安防专用交换机开始迅速在安防领域内普及&#xff0c;使用数量急剧增加&#xff0c;为安防行业的发展&#xff0c;提供了强有力的源动力。那么&#xff0c;安防工业交换机的应…

ZigBee技术的应用和优势

ZigBee一词源自蜜蜂群在发现划分位置时&#xff0c;通过跳ZigZag形舞蹈来告知同伴&#xff0c;来达到交换信息的目的。可以说是一种小的低信息量的“无线"通信方式&#xff0c;人们也就借此称呼一种专注于低功耗&#xff0c;低成本、低复杂度、低速率的、低速率的近程无线…