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的功能是在發出警告時退出本地重新協助,團隊的編碼約定以及,而且,而且,您可能有充分的理由選擇第一種或第二種樣式,甚至更傾向于選擇兩者的混合。
這使我得出最終結論,即爭議將繼續!
翻譯自: https://www.javacodegeeks.com/2014/04/java-code-style-the-final-decision.html
java 代碼風格
總結
以上是生活随笔為你收集整理的java 代码风格_Java代码风格:最终决定的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 医疗机构设置标准(二级医疗机构设置标准)
- 下一篇: 安卓版计算器下载安装(安卓版计算器)