日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java代码风格:最终决定

發(fā)布時(shí)間:2023/12/3 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java代码风格:最终决定 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

所謂的最不起眼的事情如何導(dǎo)致?tīng)?zhēng)議性的討論,有時(shí)甚至導(dǎo)致激烈的辯論激烈,這不是很有趣嗎? 例如,我目睹了幾次場(chǎng)合,如何使用關(guān)鍵字final引發(fā)了非常激烈的爭(zhēng)論。 對(duì)于一個(gè)外部觀(guān)察者來(lái)說(shuō),這看起來(lái)似乎是對(duì)邪惡或神圣的最終決定stake可危。

但是,必須公平地說(shuō),大多數(shù)可能的final用例很難適應(yīng)簡(jiǎn)單的對(duì)或錯(cuò)模式。 使用還是不使用的選擇取決于經(jīng)常矛盾的個(gè)人強(qiáng)調(diào)。

在文學(xué)中尋求建議時(shí),唯一的中途共識(shí)似乎是最終常數(shù)定義…

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

…和約書(shū)亞·布洛赫(Joshua Bloch)的第15項(xiàng):最小化可變性1 ,他建議將不可變類(lèi)的所有字段都定型為final并確保不能擴(kuò)展該類(lèi)(而后者不必通過(guò)final強(qiáng)制實(shí)現(xiàn)):

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

從那里意見(jiàn)分歧。 小羅伯特·西蒙斯 在他的《 Hardcore Java 2》一書(shū)中,整整一章都專(zhuān)門(mén)介紹了final關(guān)鍵字,他在結(jié)尾給出了強(qiáng)烈的建議:“將final遍及整個(gè)代碼”。 這個(gè)寫(xiě)得很好的章節(jié)包含許多關(guān)于通過(guò)聲明變量,參數(shù),方法或類(lèi)final將邏輯錯(cuò)誤轉(zhuǎn)換為編譯時(shí)錯(cuò)誤的優(yōu)點(diǎn)的見(jiàn)解。

另一方面,羅伯特·C·馬丁(Robert C. Martin)明確不同意以下陳述:“有一些對(duì)final良好用法,例如偶爾的final常數(shù),但否則關(guān)鍵字幾乎沒(méi)有價(jià)值,而且會(huì)造成很多混亂” 3 。 他繼續(xù)說(shuō), final可能會(huì)遇到的錯(cuò)誤類(lèi)型通常會(huì)在他的單元測(cè)試中涵蓋。

雖然我傾向于同意馬丁,但我不會(huì)說(shuō)席夢(mèng)思通常是錯(cuò)的。 過(guò)去,我實(shí)際上經(jīng)常自己使用final關(guān)鍵字,以避免編程錯(cuò)誤或?yàn)E用。 但是,改變主意的原因之一可能是幾年前我轉(zhuǎn)向TDD方法。

通過(guò)這樣做,除馬丁的論點(diǎn)之外,我注意到,如果將協(xié)作者類(lèi)或其某些方法聲明為final ,則通過(guò)協(xié)作者模擬實(shí)現(xiàn)測(cè)試隔離變得更加棘手。 由于很難將測(cè)試視為濫用 ,這使我想到了此類(lèi)聲明可能暗示的深遠(yuǎn)影響。 我意識(shí)到,很難預(yù)見(jiàn)到將沒(méi)有有效的用例,這將證明擴(kuò)展和覆蓋是合理的。

相反,面對(duì)final方法或類(lèi),人們有時(shí)會(huì)頗具創(chuàng)造力,以某種方式規(guī)避了限制,使事情可能比例如類(lèi)擴(kuò)展本來(lái)就糟。 因此,如今,我通常避免在類(lèi)和方法聲明上使用關(guān)鍵字,而將自己局限于文檔中不希望出現(xiàn)的子類(lèi)注釋或類(lèi)似內(nèi)容。

在本文結(jié)束之前,我想就上述混亂的話(huà)題分享最后的想法。 為此,請(qǐng)查看以下代碼,該代碼依賴(lài)final來(lái)確定方法范圍的變量和參數(shù):

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 );}} );}

盡管代碼沒(méi)有多大用處,并且可以進(jìn)行不同的排列,但是對(duì)于最近偶然遇到的final 代碼 ,它反映了一些實(shí)際的編碼風(fēng)格 。 盡管這種樣式可以防止在發(fā)生意外時(shí)重新分配局部變量,但它也掩蓋了一個(gè)事實(shí),即final聲明實(shí)際上是強(qiáng)制性的。 這是因?yàn)樵谀涿鸕unnable實(shí)現(xiàn)中使用了變量item 。 下一個(gè)代碼片段擺脫了不必要的聲明以強(qiáng)調(diào)不同之處:

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

權(quán)衡利弊我更喜歡最后一個(gè)變體,但我假設(shè)根據(jù)您個(gè)人的觀(guān)點(diǎn),IDE的功能是通過(guò)警告退出本地重新協(xié)助的能力,團(tuán)隊(duì)的編碼約定以及,而且,而且,您可能會(huì)有充分的理由選擇第一種或第二種樣式,甚至更傾向于選擇兩者的混合。

這使我得出最終結(jié)論,那就是爭(zhēng)論將繼續(xù)下去!

  • 有效的Java(第二版),第4章–類(lèi)和接口,Joshua Bloch,2008年, ?
  • 頑固的Java,第2章-最后的故事,小羅伯特·西蒙斯,2004年, ?
  • 干凈的代碼,第16章,重構(gòu)SerialDate,羅伯特·C·馬丁,2009年?
  • 翻譯自: https://www.javacodegeeks.com/2014/04/java-code-style-the-final-decision.html

    總結(jié)

    以上是生活随笔為你收集整理的Java代码风格:最终决定的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。