seo网站地图,wordpress如何改成中文,微信公司网站,做产品类网站java 代码风格所谓的最不起眼的事情如何引发争议性的讨论#xff0c;有时甚至引起激烈的辩论#xff0c;难道不是很有趣吗#xff1f; 例如#xff0c;我目睹了几次场合#xff0c;如何使用关键字final引发了非常激烈的争论。 对于外部观察者来说#xff0c;这看起来似乎… 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的功能是在发出警告时退出本地重新协助团队的编码约定以及而且而且您可能有充分的理由选择第一种或第二种样式甚至更倾向于选择两者的混合。 这使我得出最终结论即争议将继续 有效的Java第二版第4章–类和接口Joshua Bloch2008年 ↩ 顽固的Java第2章-最后的故事小罗伯特·西蒙斯2004年 ↩ 干净的代码第16章重构SerialDate罗伯特·C·马丁2009年↩ 翻译自: https://www.javacodegeeks.com/2014/04/java-code-style-the-final-decision.htmljava 代码风格