java 绑定微信号开发_Java开发中的更多常见危险信号

java 绑定微信号开发

在《 Java开发中的常见危险信号》一文中,我研究了一些不一定本身就是错误或不正确的做法,但它们可能表明存在更大的问题。 这些“红色标记”类似于“代码气味”的概念,我在这篇文章中引用的某些特定“红色标记”被称为“代码气味”。 如我在第一篇文章中所述,这些“红色标志”中的几个被认为足够重要,以至于静态代码分析工具和Java IDE会对其进行标记。

直接“记录”消息到stdout或stderr

日志记录框架已经在Java中使用了很长时间了,今天,我们有各种各样的日志记录框架 (其中一些相互构建),包括传统的Log4j 1.2 , log4j 2 , java.util.logging ( Java Logging API ), Apache Commons Logging和SLF4J 。 鉴于此,当我在Java代码中看到System.out和System.err引用时,我感到很惊讶。

有许多原因直接引起人们关注是否存在直接写入标准输出或标准错误的Java代码。 引起关注的一个原因是,这可能意味着不成熟的代码,该代码原本打算在以后更改为日志记录,但却没有得到最终的关注。 引用标准输出和标准错误的另一个缺点是,“日志”消息可能不会出现在日志文件中,而其余日志则由日志框架编写。 第三个问题是,日志记录框架提供了许多不错的功能,而简单地写入标准输出和标准错误并没有提供这些功能。 这些功能包括轻松控制所记录消息的级别的能力,控制是否在指定的记录级别下是否降低性能以生成较大的输出字符串的能力,轻松将捕获的异常与已记录的错误消息相关联的功能,并能够轻松地将输出重定向到不同的目的地和不同的格式。 尽管所有这些都可以在直接处理输出和错误流时手动完成,但它需要自定义工作,而不是“开箱即用”。

除了使用System.outSystem.err直接访问外,Java代码中还存在一些写入标准输出和标准错误的表现形式(尽管它们通常隐式包含System.outSystem.err )。 例如, Throwable.printStackTrace() [在Exception的处理中更常用],正如其Javadoc所言,“将此throwable及其回溯打印到标准错误流中。”

使用StringBuffer而不是StringBuilder

这诚然是一个很小的事情,但它可以指示过时的 Java代码( StringBuffer的推出在JDK 1.0和StringBuilder的介绍在J2SE 5 )或Java代码在开发商没有明白之间的差别的StringBuffer和StringBuilder的 。 在大多数情况下,两者之间的性能差异对手头的应用程序并不重要,但是由于StringBuilder在大多数我已经看到使用StringBuffer的 情况下更可取 ,因此人们也可能会喜欢使用StringBuilder通常具有轻微的性能优势。 我有困难的时候,回顾一个实例中,我所看到StringBuffer使用其中StringBuilder不可能被替代。 一个相关的危险信号是将String串联与StringBuilder混合在其构造函数或重载的append方法中。

方法和构造函数中的参数过多

当方法或构造函数的参数过多时,尤其是在多个参数具有相同类型的情况下,我总是担心其客户端无法正确使用该方法或构造函数。 例如,如果某个方法接受三个String和三个boolean ,则客户端很容易混淆传入的特定值。在这种情况下,编译器无济于事,这是检测问题根源的唯一方法(甚至根本不存在问题)在运行时(通过单元测试或其他测试,或者可悲的是,在软件的常规执行过程中)。 对于不正确的设计,太多的参数也可能成为“危险信号”。 我不会在本文中更深入地讨论这个“红色标志”,因为我已经介绍了这个“红色标志”,多种解决方法,并在一系列八篇博客文章中介绍了它。

  • Java方法中的参数太多,第1部分:自定义类型
  • Java方法中的参数太多,第2部分:参数对象
  • Java方法中的参数太多,第3部分:构建器模式
  • Java方法中的参数太多,第4部分:重载
  • Java方法中的参数太多,第5部分:方法命名
  • Java方法中的参数太多,第6部分:方法返回
  • Java方法中的参数太多,第7部分:可变状态
  • Java方法中的参数太多,第8部分:工具

过多的显式投射

显式转换可能是危险信号情况的最佳示例之一,在该情况下,转换本身可能不会影响正常工作的任何功能或逻辑,但是提示情况不尽如人意。 强制转换可能意味着较差的设计选择(例如,未正确使用多态性,在不适当的情况下使用继承,或迫使从未设计过的东西放在一起)。 在许多情况下(例如,在获取Spring Framework上下文bean时),显式强制转换当然是适当的或必需的,但是显式强制转换也可以用作拐杖,以使未经过精心设计的工作正常进行。 强制转换还可以指示过于广泛的API或过于广泛的API中使用的接口(在下一项中突出显示)。

接口或类的使用范围太广

当Set或List或更具体的接口更合适时,我经常看到Collection接口用作方法参数或返回类型。 例如,一个返回Collection但希望客户端代码知道返回的Collection是有序的方法,应返回List或更具体的接口或List实现。 同样,如果某个方法需要一个有序的Set ,则它应该将该方法宣传为希望有SortedSet或类似的接口或实现类。 对于给定的合同,当返回或期望作为参数的接口或类太宽泛时,就会迫使某人“知道”这种情况,并强制转换为适当的级别以获取他们所依赖的功能。

使用适当的级别或接口或类不仅可以避免不必要的显式转换。 适当的类型级别比单纯的文档更好地宣传和执行方法合同。 但是,它远不止于此。 在某些情况下,当公告的接口太宽而无法捕获方法协定中的假设时,可能会发生重大的运行时异常。 例如,通用接口可能会选择支持一种方法,但是该接口的实际实现在被调用时会引发UnsupportedOperationException ,因为它没有实现该可选方法。 在UnsupportedOperationException和ClassCastException之间,使用过宽的接口或类可能会导致潜在的严重运行时问题。

这并不是说应该避免使用接口或广泛的类。 而是说,应该在返回类型和参数类型中使用适当的抽象度,以便适当地宣告和强制执行调用双方的预期行为。

使用List.addAll()

使用重载的List.addAll()方法之一会让我感到紧张,当我在代码中看到它时,它会变成一个鲜红色的标志。 这并不意味着使用它总是错误的,但是似乎由于使用不当而导致我看到了很多肿的内存问题。 因为List会添加开发人员喜欢的“重复”对象,所以错误的代码可以用冗余对象以指数方式填充这些List 。 此范围的负面影响从潜在的性能障碍到内存不足。 当我看到使用List.addAll() ,我会仔细检查代码并对其进行单元测试,以确保其内存消耗不会失控。 如前面的“红色标记”中所述,必须对Collection.addAll()任何使用进行类似于List.addAll()分析,直到可以肯定地知道Collection实际上不是List为止。

非Java方言

也许对我而言,最好的例子是“危险信号”,这是与“普遍接受的Java编码标准 ”相反或明显不同的惯用语和代码约定的频繁使用。 使用名称,大小写或其他样式问题都不会直接影响代码的正确性或性能。 但是,这些差异仍然是“危险信号”,警告逻辑或性能方面的潜在实际问题,因为使用这些明显的非标准习语和约定意味着开发人员可能是Java的新手,因此可能犯了一些新的错误。 Java。 关于“没有口音”编写Java代码的重要性的一篇很好的文章是讲没有口音的Java语言 。 在该文章中,作者Elliotte Rusty Harold撰写了有关如何更难以阅读和维护此类代码的文章。

在相对罕见的情况下,这可能会从样式问题变为影响问题。 当人们以一种在另一种语言(例如C或C ++)中最有意义的方式编写Java代码,但没有Java的替代方法那么有意义时,就会发生这种情况。

结论

就像我第一篇关于Java代码中的红色标志的文章一样,本文中讨论的“红色标志”通常是指在适当和特定的情况下使用时不一定正确的事物,但通常确实表明事物不那么正确因为它们可能会在更大的应用程序中使用。

参考:来自JCG合作伙伴 Dustin Marx的Inspired by Actual Events博客中的Java开发中的更多常见 危险信号 。

翻译自: https://www.javacodegeeks.com/2013/12/more-common-red-flags-in-java-development.html

java 绑定微信号开发

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

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

相关文章

【渝粤教育】电大中专学习指南_1作业 题库

1.中央广播电视中等专业学校()颁发国民教育系列中等学历教育毕业证书的资格。 A.不具有 B.具有 错误 正确答案:左边查询 学生答案:A 2.并面向社会直接招收初中毕业生和在职青年举办()职业教育。 A.高等 B.中…

【渝粤教育】电大中专就业指导 (6)作业 题库

1.()给中职生就业带来的机遇和挑战 A.发展标准化服务业 B.一带一路 C.“十三五”规划 正确 正确答案:左边查询 学生答案:C 2.最受企业欢迎的人才应具备()素质 A.文化认同、敬业精神、团队意识、创新思想、应…

计算机二级office学习之PPT操作题考点整理

考点1 新建幻灯片 01 大纲级别 S1、word中:选择格式相似的文本-段落大纲级别; S2、打开PPT:新建幻灯片-幻灯片从大纲-选择word文档。 (S3、不保留原素材的格式)在预览窗口ctrlA,右键重设幻灯片。 注:若无法…

JDK 12的String :: transform方法的简要但复杂的历史

最近有人建议从JDK 12中删除Java预览功能Raw String Literals ( JEP 326 ), 现在正式宣布将删除预览功能 ( Java SE 12 [JSR 386] 25版将其删除 )。 JDK String类中已经添加了几种方法来支持此功能。 即使在删除原始字…

【渝粤教育】电大中专常见病药物治疗 (2)_1作业 题库

1.作为退热药,阿司匹林的劣势是()。 A.口服吸收迅速而完全 B.婴幼儿发热用阿苯片 C.儿童用药可引起Reye综合征,尤其是病毒性感染引起的发热 D.作用于下丘脑体温调节中枢 E.解热镇痛作用较强 错误 正确答案:左边查询 学…

计算机二级考前急救之Word(上)

一、文件选项卡 (思维导图来源:小黑老师) 1、另存为PDF格式:(另存为快捷键:F12) 2、去掉兼容模式:文件-信息-转换 3、删除不可见的内容:文件-信息-检查文档&#xff08…

【渝粤教育】电大中专建筑材料作业 题库

1.颗粒材料的密度为ρ,表观密度为ρ0,堆积密度为ρ0′,则存在下列关系 ( )。 A.ρ0′>ρ>ρ0 B.ρ> ρ0′>ρ0 C.ρ0 >ρ>ρ0′ D.ρ>…

【渝粤教育】电大中专沟通技巧作业 题库

1可以通过( )的方法来对抗讲话时的紧张感。 A心理暗示 B自我鼓励 C运用合适的肢体语言 D以上方法均可 错误 正确答案:左边查询 学生答案:A 2以下说法正确的是( ) A沟通要有明确的目标 B沟通不需要形成协议 …

常用快捷键

1、常用快捷键 快捷键作用快捷键作用CtrlShift切换输入法AltF4快速关闭程序Ctrl空格中英文输入法切换CtrlS保存Ctrl。切换中英文标点CtrlA全选WindowsE快速打开计算机CtrlZ撤销WindowsD快速回到桌面CtrlC复制WindowsL快速锁定电脑CtrlX剪切F1帮助键CtrlV粘贴F2重命名CtrlF查找…

参数化测试 junit_使用JUnitParams进行参数化的JUnit测试

参数化测试 junit参数化的单元测试用于在不同条件下测试相同的代码。 借助参数化的单元测试,我们可以建立一种测试方法,该方法从某个数据源中检索数据。 该数据源可以是测试数据对象,外部文件甚至数据库的集合。 一般的想法是使使用相同的单元…

【渝粤教育】电大中专混凝土结构作业 题库

1.下列测试方法中不是混凝土内部空洞和缺陷的检测方法的是() A.钻孔法 B.盲孔法 C.对测法 D.斜测法 正确 正确答案:左边查询 学生答案:B 2.选择测量仪器时,最大被测值一般不宜大于选用仪器最大量程的() A.70% B.80% C.90% D. 100% 正确 正确答…

计算机二级office学习之Excel操作题考点整理

考点1 页面设置 页面布局-页边距、纸张方向、纸张大小、打印区域、页面背景、打印标题、页眉页脚、缩印 页面布局-选中打印区域-打印标题-顶端标题行-选中第二行 考点2 获取外部数据和删除重复值 1、获取外部数据 1.1 自网页 右击文件-打开方式为IE浏览器(360可…

【渝粤教育】电大中专职业应用写作_1作业 题库

1.每个大学生最应该具备的写作能力是() A.诗歌创作 B.小说创作 C.应用文写作 D.散文创作 错误 正确答案:左边查询 学生答案:A 2.下面说法正确的是() A.应用文可以发挥依据和凭证的作用 B.应用文不能规范人们…

Jsoup V的幕后秘密:优化的技巧和窍门

我们做对了,现在是时候更快地做事了。 我们会牢记Donald Knuth的警告:“大约97%的时间,我们应该忘记效率低下:过早的优化是万恶之源”。 根据Jonathan Hedley的介绍,他使用YourKit Java Profiler来测量内存…

【渝粤教育】广东开放大学 会议运行管理 形成性考核 (38)

选择题 题目: 会议的含义是 选择一项: 答案:看左侧 题目: 报告、发言、讲话、辩论等口头交流的方式是与会人员传递信息、交流思想、表达意志和阐明立场的主要手段。这是指的会议的什么性质 选择一项: 答案&#xff1…

计算机二级选择题复习整理(公共基础部分)

主要列个人不太熟悉或较为重要的点,不求全。 一、计算机基础 1、计算机最早应用领域是数值计算 2、冯诺依曼型体系计算机引进概念:二进制、存储程序 3、CAD:设计;CAM:制造;CAI:教育&#xff1…

【渝粤教育】广东开放大学 动画概论 形成性考核 (44)

选择题 题目:“动画”这个词最早是哪国人提出的 答案:看左侧 题目:被誉为“动画的鼻祖”的是 答案:看左侧 题目:被公认为世界上第一部动画影片的是 答案:看左侧 题目:动画片是电影的一种特殊类…

【渝粤教育】广东开放大学 嵌入式数据库 形成性考核 (48)

选择题 题目:SQL语句中的条件用以下哪一项来表达( ) 题目:“Create Unique Index AAA On 学生表(学号)”将在学生表上创建名为I_xsb的( )。 题目:( &#xff…

移动通信学习笔记03_蜂窝原理

教学大纲:组网技术 基本内容:典型的多址接入技术;话务量与呼损率的计算;蜂窝的概念、频率复用原则和区群的概念;信道的分配策略和分配原则;蜂窝系统的基本网络结构和各部分的功能;切换和漫游&am…

【渝粤教育】广东开放大学 影视艺术概论 形成性考核 (52)

选择题 题目: 电影被称为 。 选择一项: 答案:看左侧 题目: 《淘金记》是 的作品。 选择一项: 答案:看左侧 题目: 《母与法》是由 拍摄的。 选择一项: 答案&#xf…