结构性错误

团队成员在使用以下代码时遇到了麻烦:

 void extractData(String targetUri) { Path tempFile = createTempFilePath(); extractDataToPathAndUpload(tempFile, targetUri); cleanUp(tempFile);  }  void extractDataToPathAndUpload(Path tempFile, String targetUri) { try (FileOutputStream stream = createOutput(tempFile)) { // extract from db to file stream database.readTable(TABLE_1, stream); // upload the temp file to the destination uploader.upload(tempFile, targetUri); }  } 

上面的代码经过精简和简化,使您对问题有所了解。 我们有一个数据库,一个要写入的临时临时文件和一个上载过程。

问题是上upload呼叫无法正常工作。 真令人沮丧!

老鹰眼的读者可能会发现,在进行上upload调用时,由第二个函数内的OutputStream写入的临时文件尚未关闭。 那是个错误,解决方法是将调用uploadtry-with-resources块之外,该块的工作是关闭流,从而释放文件(至少在Windows上,您不能读取您也在写的文件!)。

错误不是那样!

这是一个很难发现的错误,是结构决策的结果。 上载调用属于导出操作之外的原因不仅是为了确保流关闭,还因为它是整个过程的另一个阶段。 该过程应该是:

  • 创建临时位置
    • 导出到临时位置
  • 清理临时位置

这里的缩进反映了作用域。

上面的实现合并了两个中间步骤,甚至似乎将导出操作置于导出中。 这是一个结构性错误。

有一个论点是,上面的代码应该被编写为三个函数,而不是两个:

  • 一种功能,用于管理临时文件,然后调用...
  • 下一个调用导出,然后上传的函数
  • 导出功能

这是一个很好的例子,说明在正确使用结构方面的一些额外精度将减少难于发现的错误将我们赶走的可能性。

翻译自: https://www.javacodegeeks.com/2019/10/the-structural-bug.html

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

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

相关文章

mysql小计_使用SQL实现小计,合计以及排序_MySQL

bitsCN.com--说明:个人学习笔记,实现小计合计显示,分组按BANK_IDOP_DATE升序排序--测试数据CREATE TABLE #TB(ID VARCHAR(10),BANK_ID VARCHAR(10),OP_DATE VARCHAR(10),OPERATOR_NO VARCHAR(20),AMT DECIMAL(10,2))INSERT #TB SELECT 1111,0…

mule和activemq_Mule ESB,ActiveMQ和DLQ

mule和activemq在本文中,我将展示一个简单的Mule ESB流程,以了解实际中使用的Active MQ 的DLQ功能 。 我假设您有一个正在运行的Apache ActiveMQ实例(如果没有,则可以在此处下载一个版本)。 在此示例中,我…

MySQL倒序如何避免filesort_如何避免mysql查询的filesort?

我用不同的参数使用这种查询:EXPLAIN SELECT SQL_NO_CACHE ilan_genel.id , ilan_genel.durum , ilan_genel.kategori , ilan_genel.tip , ilan_genel.ozellik , ilan_genel.m2 , ilan_genel.fiyat , ilan_genel.baslik , ilan_genel.ilce , ilan_genel.parabirimi …

在Java中键入Safe SQL

字符串,字符串,字符串 无论您使用的是JPA , MyBatis还是Spring Data JDBC之类的框架,最终都将SQL语句声明为Java String。 这种方法的问题在于,您必须为每个语句编写测试,以确保它甚至是有效的SQL。 没有编…

springmvc怎么设置更改了界面不用重启_Microsoft Visual Studio 2019 更改语言包

第一次写文章,如有格式等问题,请多多包含与指点!很多人在编程时更喜欢英文界面,认为与编程语言具有相同的语境,更顺手。但是,在更改环境显示语言时,可能会遇到一些障碍,例如我之前在…

苹果电脑怎么删除软件_误格式化,删除文件怎么恢复?3款最好用的数据恢复软件推荐...

1、EasyRecovery一款威力非常强大的硬盘数据恢复工具,能够恢复丢失的数据以及重建文件系统。主要体现在可以从被病毒破坏或是已经格式化的硬盘中恢复数据。EasyRecovery在使用过程中不会在原始的驱动器中写入任何东西,其主要是在内存中重建文件分区表使数…

设计模式 生成器_生成器设计模式的应用

设计模式 生成器嗨,您好! 今天,我将分享我制作的全新设计模式系列的第一个。 构建器设计模式是开发严肃的应用程序时非常有用且通用的模式。 在这篇文章中,我将提供一个很小的构建器模式框架,因此您随时可以回到这里并…

C++ Qt全局异常处理器_QT教程

点击上方 蓝字关注我们今日资源今天的资源是另一套QT教程,某马发的,网上搜集到的。这已经是这个公众号发放的第三套QT教程了。关于QT:Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C 开发库,主要用来开发图形用户界面…

无线设置 用户_无线WiFi远距离无线蹭网怎么中继桥接组网【详细介绍】

自从小编每天分享各种各样的无线无线WiFi蹭网、桥接、远距离组网等实例,吸引了很多朋友的兴趣,有很多网友通过关心我后,给我私信,求助我一些相关的问题,还有一些朋友建议我出一些教程。首先小编觉得有些东西只能意会不…

应用宝苹果版_点赞应用ios版下载-点赞应用苹果版下载v1.1

《点赞应用》app是一款实用的视频生成器工具,用户可以利用它为自己的视频添加各种各样的点赞效果。应用内含有多种类型的模板,都是免费使用的,想要将你的视频变得更有趣吗?快来下载体验一下这款应用吧!软件特色1、这个…

SQL即服务

自2007年以来,我一直在考虑这一点,大约在Amazon 推出 S3时。 我什至尝试实现了几次,但是在设计阶段之后就失败了。 我听说过一家初创公司,也曾尝试这样做,但也失败了 。 我仍然不确定是否可以这样做,但是它…

c++ vector 一部分_《JACS》:在富电子C-H键位点上实现光控活性聚合

可逆加成-断裂链转移(RAFT)自由基活性聚合是一种调控聚合物结构组成、分子量和分布的重要聚合方法,其中,光诱导电子/能量转移(PET)的RAFT聚合反应是一种更精确的调控手段,因而经常被用于设计具有复杂3D分子结构的聚合物。然而常规的PET-RAFT法…

phpmyadmin忘记mysql密码_忘记phpmyadmin密码怎么重置

忘记phpmyadmin密码怎么重置,新密码,教程,相关文章,重新启动,跳过忘记phpmyadmin密码怎么重置易采站长站,站长之家为您整理了忘记phpmyadmin密码怎么重置的相关内容。1、停止mysql服务:/etc/init.d/mysql stop2、跳过验证启动MySQL/usr/local/mysql/bin/…

纵横免root框架打不开应用怎么办_很好用的软件多开神奇安卓欧皇十框架!!!...

欧皇十框架这是一款兼容安卓10的应用框架,轻松实现应用多开,可以完美免ROOT运行GG修改器,专为和平精英游戏设计,软件体积小,运行稳定。修改说明:1.支持更多应用游戏的多开、双开,使用更稳定、快…

电脑无internet访问_电脑中的代理服务器怎么设置 代理服务器设置方法 - 操作系统...

如何设置电脑中的代理服务器?对于代理服务器,可能大家对其并不是非常了解,其实代理服务器作为一种特殊的网络服务,可以代理网络用户去获取网络信息,提高浏览速度与效率,而且还可以突破自身IP的访问限制,访…

mysql先进后出_栈、队列中“先进先出”,“后进先出”的含义

展开全部先进先出(62616964757a686964616fe58685e5aeb931333433653339FIFO,first-in,first-out)为处理从队列或堆栈发出的程序工作要求的一种方法,它使最早的要求被最先处理。后进先出,从栈中取出数据项的顺序与将它们插入栈的顺序…

敲代码时如何快速移动光标_如何用 Linux 技巧大大提高工作效率?

前言Linux中的一些小技巧可以大大提高你的工作效率,本文就细数那些提高效率或者简单却有效的Linux技巧。命令编辑及光标移动这里有很多快捷键可以帮我们修正自己的命令。接下来使用光标二字代替光标的位置。删除从开头到光标处的命令文本ctrl u,例如&am…

java 异常练习题_java入门异常处理练习题问题

tppe大概方式:1、判断用户输入的类型是否正确,不正确捕获异常,把他包装成我自己定义的异常2、判断用户输入的数是多少2.1、如果是1,则打印“输入图书名称”,用户输入,定义一个Book类型的数组,然…

windows副本不是正版怎么办_盗版系统总是崩溃?别着急,让我来告诉你正版系统怎么下载...

电脑系统崩溃了怎么办?相信很多小伙伴都会选择重装系统,奈何自己又不会,只能搬到修电脑的地方,最后发现安装的还是盗版系统,不能登录微软账号不说,还会被捆绑安装一堆流氓软件,那么,…

sudo spctl --master-disable_量大从优批发--阳离子聚丙烯酰胺--用于生活污水、

量大从优批发--阳离子聚丙烯酰胺--用于生活污水、wkkk量大从优批发--阳离子聚丙烯酰胺--用于生活污水、怎么来辨别聚丙烯酰胺到底是什么型号的呢?下面来介绍型号辨别的消防法。聚丙烯酰胺我们都知道聚丙烯酰基是昂贵的阳离子,其次是非离子聚丙烯酰胺&…