java 代码风格_Java代码风格:最终决定

java 代码风格

所谓的最不起眼的事情如何引发争议性的讨论,有时甚至引起激烈的辩论,难道不是很有趣吗? 例如,我目睹了几次场合,如何使用关键字final引发了非常激烈的争论。 对于外部观察者来说,这看起来似乎是对邪恶或神圣的最终决定decision可危。

但是,必须公平地说,大多数可能的final用例都很难适应简单的对或错模式。 使用还是不使用的选择取决于经常相互矛盾的意图的个人强调。

在文学中寻求建议时,唯一的中途共识似乎是最终常数定义…

class Foo {public static final String CONSTANT = "constantValue";
}

…以及约书亚·布洛赫(Joshua Bloch)的第15项:最小化可变性1 ,他建议将不可变类的所有字段都定型为final并确保不能扩展该类(而后者不必通过final强制实现):

public final class Foo {private final int value;public Foo( int value) {this.value = value;}public int getValue() {return value;}[...]
}

从那里意见分歧。 小罗伯特·西蒙斯 在他的《 Hardcore Java 2》一书中,整整一章都专门介绍了final关键字,他在结尾给出了强烈的建议,即“将final遍及整个代码”。 这个写得很好的章节包含许多关于通过声明变量,参数,方法或类final逻辑错误转换为编译时错误的优点的见解。

另一方面,罗伯特·C·马丁(Robert C. Martin)明确不同意以下陈述:“有一些对final良好用法,例如偶尔的final常量,但否则关键字几乎没有增加任何价值并造成很多混乱” 3 。 他继续说, final可能会遇到的错误类型通常会在他的单元测试中涵盖。

虽然我倾向于同意马丁,但我不会说席梦思通常是错的。 过去,我实际上经常自己使用final关键字,以避免编程错误或滥用。 但是,改变主意的一个原因可能是几年前我转向了TDD方法。

这样一来,除了Martin的论点,我注意到,如果将协作者类或其某些方法声明为final ,则通过协作者模拟实现测试隔离将变得更加棘手。 由于很难将测试视为滥用 ,这使我想到了此类声明可能暗示的深远影响。 我意识到,很难预见到将没有有效的用例,这将证明扩展和覆盖是合理的。

相反,面对final方法或类,人们有时会颇具创造力,以某种方式规避了限制,这使事情可能比例如类扩展本来就糟。 因此,如今,我通常避免在类和方法声明上使用关键字,而将自己局限于文档中不希望出现的子类注释或类似内容。

在本文结束之前,我想就上述混乱的话题分享最后的想法。 为此,请查看以下代码,该代码依赖final来确定方法范围的变量和参数:

public void doit( final String message ) {final int value = calculate();final Item item = create( value, message );executorService.submit( new Runnable() {public void run() {handle( item );}} );}

尽管代码没有多大用处,并且可以按不同的方式排列,但是对于最近偶然遇到的final 代码 ,它反映了某种真正的编码风格 。 尽管这种样式可以防止在发生意外时重新分配局部变量,但它也掩盖了一个事实,即final声明实际上是强制性的。 这是因为在匿名Runnable实现中使用了变量item 。 下一个代码段摆脱了不必要的声明以强调不同之处:

public void doit( String message ) {int value = calculate();final Item item = create( value, message );executorService.submit( new Runnable() {public void run() {handle( item );}} );}

权衡利弊我更喜欢最后一个变体,但我假设根据您个人的观点,IDE的功能是在发出警告时退出本地重新协助,团队的编码约定以及,而且,而且,您可能有充分的理由选择第一种或第二种样式,甚至更倾向于选择两者的混合。

这使我得出最终结论,即争议将继续!

  1. 有效的Java(第二版),第4章–类和接口,Joshua Bloch,2008年, ↩
  2. 顽固的Java,第2章-最后的故事,小罗伯特·西蒙斯,2004年, ↩
  3. 干净的代码,第16章,重构SerialDate,罗伯特·C·马丁,2009年↩

翻译自: https://www.javacodegeeks.com/2014/04/java-code-style-the-final-decision.html

java 代码风格

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

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

相关文章

[渝粤教育] 天津师范大学 教育心理学(唐卫海) 参考 资料

教育 -教育心理学(唐卫海)-章节资料考试资料-天津师范大学【】 第一章 平时测验 1、【单选题】在学校中做教育心理学相关实验研究,既可科学又有效的方法是( )。 A、观察法 B、调查法 C、自然实验法 D、实验室实验法 参…

光端机的原理和使用范围

数字音频光端机在通信系统中可以说是应用非常广泛,特别是在安防系统、智能交通监控系统、远程多媒体教学/ 校园监控、长距离广播电视传输系统、楼宇控制系统等,可以说我们的日常通讯是离不开音频光端机的。接下来杭州飞畅的小编就来为大家详细介绍下音频…

[渝粤教育] 宁波城市职业技术学院 现代应用文写作 参考 资料

教育 -现代应用文写作-章节资料考试资料-宁波城市职业技术学院【】 第一周测试 1、【单选题】我国最早最古老的应用文是( ) A、甲骨卜辞 B、青铜器铭文 C、远古神话 D、原始劳动诗 参考资料【 】 2、【单选题】以下文种哪个是行政公文( &…

[渝粤教育] 山东第一医科大学 健康教育与健康促进 参考 资料

教育 -健康教育与健康促进-章节资料考试资料-山东第一医科大学【】 第一讲测验 1、【单选题】健康教育学是一门以什么为对象的科学和艺术? A、健康相关行为 B、健康 C、疾病 D、环境 E、教育 参考资料【 】 2、【单选题】健康教育学作为一门艺术,下面哪项…

光端机的作用有哪些?

光端机是一个延长数据传输的光纤通信设备。光端机一般成对使用,分为光发射机和光接收机,光发射机完成电光转换,并把光信号发射出去用于光纤传输;光接收机主要是把从光纤接收的光信号再还原为电信号,完成光电转换。那么…

[渝粤教育] 平顶山学院 生活中的微观经济学 参考 资料

教育 -生活中的微观经济学-章节资料考试资料-平顶山学院【】 第一章课后作业 第一章单元测验 1、【单选题】经济学的核心问题是: A、最充分利用稀缺资源 B、利用政府部门的计划职能 C、降低人们的需要程度 D、增加人们的知识素养 参考资料【 】 2、【单选题】稀缺问…

光端机怎样使用?光端机怎么和交换机连接?

了解通信网络的朋友想必对于光端机以及交换机这块不会陌生吧,今天,杭州飞畅的小编就来为大家详细介绍下光端机的应用范围以及选购注意事项,另外再详细介绍下光端机和光纤交换机的连接方式,感兴趣的朋友就一起来看看吧!…

[渝粤教育] 新乡医学院三全学院 医学分子生物学 参考 资料

教育 -医学分子生物学-章节资料考试资料-新乡医学院三全学院【】 测试–基因的结构与功能 1、【单选题】1. 关于基因的说法错误的是 A、A. 基因是贮存遗传信息的单位 B、B. 基因的一级结构信息存在于碱基序列中 C、C. 为蛋白质编码的结构基因中不包含翻译调控序列 D、D. 基因的…

nodemanager_如何使用NodeManager来控制WebLogic Server

nodemanager在上一篇文章中 ,您已经了解了如何启动WebLogic管理员和多个托管服务器。 该指令的一个缺点是这些进程将从前台开始,而STDOUT则打印在终端上。 如果打算将这些服务器作为后台服务运行,则可能需要尝试使用WebLogic节点管理器wlscon…

[渝粤教育] 武汉理工大学 刑法 参考 资料

教育 -刑法-章节资料考试资料-武汉理工大学【】 第一章 单元测试 1、【单选题】某外国商人甲在我国领域内犯重婚罪,对甲应如何处置? A、适用我国刑法追究其刑事责任 B、通过外交途径解决 C、适用该外国刑法追究其刑事责任 D、直接驱逐出境 参考资料【 】 2、【单选…

光端机按照技术类型及接口种类是怎么分类的?

在之前我们介绍过光端机的分类,了解到光端机可划分为视频光端机、音频光端机、电话光端机、数字光端机、以太网光端机等,那么如果按照技术划分的话,光端机可以分为哪些类别呢?接下来就跟随飞畅科技的小编一起来看看吧!…

[渝粤教育] 武汉理工大学 认识武理 参考 资料

教育 -认识武理-章节资料考试资料-武汉理工大学【】 单元测验 1、【单选题】原武汉工业大学追溯至张之洞担任湖广总督期间,创办系列学堂。下列哪个学堂是原武汉工业大学的前身? A、两湖学堂 B、自强学堂 C、湖北工艺学堂 D、华夏学堂 参考资料【 】 2、【…

光端机和光纤交换机的区别?

简单的来说,光端机是负责传输的设备,交换机就是数据交换和共享的设备,两者是完全不同的设备。光端机一般用于监控网络,而光纤交换机一般用于计算机网络。接下来就由杭州飞畅的小编来为大家详细介绍下光端机和光纤交换机之间的区别…

光端机和收发器的区别有哪些?

光端机和光纤收发器都是以光纤为载体的一种传输工具,都具有光电转换功能,也叫光电转换器。虽然二者之间有一样的功能,但是在本质上还是有所区别的,所以很多不了解的朋友可能会分不清什么是光端机,什么是收发器&#xf…

[渝粤教育] 江西外语外贸职业学院 商务英语翻译技巧 参考 资料

教育 -商务英语翻译技巧-章节资料考试资料-江西外语外贸职业学院【】 随堂测验 1、【单选题】We have been on pins and needles waiting for you. A、我们一直在急切地盼着你来,如坐针毡。 B、我们坐在针毡上等你。 C、我们会一直等你。 D、我们非常痛苦地盼着你来…

java改变变量编码方式_Java 8中的5个功能将改变您的编码方式

java改变变量编码方式Java 8在JVM和语言级别都包含了一些非常令人兴奋的功能。 尽管最初为该发行版设想的某些功能已扩展到第9版,或已推出第9版,但实际上有数十个新功能。 许多新添加的内容在编译器,JVM或帮助系统级别都进行了后台改进。 这样…

光端机连接示意图详细连接方式图解

光端机在监控安防领域可以说是应用非常广泛,那么我们在使用光端机的过程中该如何连接呢?在连接的过程中需要注意些什么事项呢?接下来就由杭州飞畅科技的小编来为大家分享下几款典型的光端机连接方法详细图解介绍和一些容易被忽略的细节性问题…

[渝粤教育] 泉州师范学院 闽南与海丝文化 参考 资料

教育 -闽南与海丝文化-章节资料考试资料-泉州师范学院【】 第一章单元作业 第一章单元测验 1、【单选题】闽南文化的主体是( ) A、厦门文化 B、泉州文化 C、漳州文化 D、潮汕文化 参考资料【 】 2、【单选题】闽南文化圈的核心圈是( &#xf…

国内外知名光端机品牌大全

光端机,就是光信号传输的终端设备,主要是应用在安防监控这一块,随着通信技术的不断提高以及光端机的广泛应用,国内外的光端机厂家可以说是如雨后春笋般发展起来,当然这些生产厂家多是中小企业,各品牌也先后…

[渝粤教育] 盐城工学院 环境监测与仪器分析 参考 资料

教育 -环境监测与仪器分析-章节资料考试资料-盐城工学院【】 单元作业 单元测试 1、【单选题】饮用水源地全年采样不少于( )次,采样时间根据具体情况选定。 A、6 B、8 C、10 D、12 参考资料【 】 2、【单选题】蒸馏法是利用水样中各污染组分具有 而使其彼此分离的方…