关于“最终”的最终决定
在Java中,過度使用final感覺就像是SHOUTING。 在很多時候它已經過時且不合適。
Java和JavaScript
這主要是關于Java中的final關鍵字,但是我對JavaScript中與之對應的const看法略有變化。 我可以認為const是一件好事,而final是一件壞事,需要進行一些分解。
我喜歡JavaScript中的const ,因為總的來說,使用let或var代碼往往會執行我不同意的事情。 總體而言,變量在首次賦值后不需要重新分配。 對于累加器或某些循環情況,這不是正確的,但事實并非如此。
我提議的許多重構都是通過公式停止再分配該臨時變量并將其委托給選擇答案并返回它的函數。
因此,我的前提是,代碼應在很大程度上應在所有變量默認情況下都視為單分配的前提下工作。
那我們先執行吧?
我們為什么不應該用Java來強制執行呢?
Java的已經有有效的最終帶來的最終好處這就需要信任結構概念的東西是最終的 -即lambda函數和匿名內部類。 從本質上講,編譯器已經知道final了,對我而言,在最終位置添加final就像喊一樣。 當然,這會使代碼更加繁忙……少即是多, final感覺就像人滿為患。
我會原諒JavaScript中的const ,部分原因是linter非常熱衷于推斷const ,然后再要求它,部分原因是JavaScript是一種寬松的語言,如果不牢固地表達它,您將無法信任任何內容。 就是說,我寧愿不需要它!
我們如何信任自己?
是的,但是如果我不說某件事是final ,我怎么知道某事確實是final的。 如果有人更改了該怎么辦?
范例A:
public bool isFound(List<String> list, String value) { for ( final String item:list) { if (value.equals(item)) { return true ; } } return false ; }上面的代碼保證了循環內的item無法重新定義。 第一位–誰在乎!? 2號–方法非常簡短。 如果忍者出現并試圖改變item的價值,您會發現它的功能簡短。
這就是重點。 如果您的功能非常短,并且使代碼保持模塊化,則可以看到發生了什么。 您不會感到意外,并且可以發現變化的變量與沒有變化的引用。
范例B:
final boolean hadValue = isFound(myList, "Foo" ); final boolean hadOtherValue = isFound(myList, "Bar" ); final boolean bothFound = hadValue && hadOtherValue; final String message = "They were both " + bothFound ? "found" : " not found" ; return message;打哈欠!
boolean bothFound = isFound(myList, "Foo" ) && isFound(myList, "Bar" ); return "They were both " + bothFound ? "found" : " not found" ;別讓我跟著你的思維過程,只用final一個字作為調味料。 使代碼中的句子解釋整個思想,并僅在需要時添加變量和修飾符。
決賽進入哪里?
我明智地使用final 。 我應該說,我在類內部將Spring組件中所有bean組件/服務的所有子服務都設為private final ,但我沒有。 有一個爭論,那就是應用程序上下文中服務的連接本質上是不可變的,但我傾向于不是這樣。 如果您這樣做,我不會爭論。
我有兩個關鍵用例,其中final是必須的!
他們都是關于呼喊和不變性的重要性。
- 全局常量必須這樣標記
- 實施不變模式需要final并且也應標有路標
因此,您總是會發現我在類內部使用的類級常量或全局變量中使用private static final SomeType SOME_CONSTANT_IN_CAPITALS ,因為它們是特殊的,必須被視為具有額外保護的常量–約定很強,并且存在危險虐待比單個函數中的局部變量高得多。
您會發現我想要正確實現不變模式。
學習過求職面試并知道final也可以防止事情被壓倒的人在這個階段可能會感到自鳴得意,直到我說我對使用它并不真正感興趣。 如果您試圖阻止程序員具有靈活性,或者試圖通過使final滿足要求而滿足checkstyle或Sonar的要求,那就加油!
但是,如果您出于某些原因想要真正的不可變對象,那么我向您致敬。
結論
當我開始寫存儲在緩存中并由多個線程共享的不可變數據對象時,您將無法阻止我final完成它。
我將在每周的每一天將您的記錄器和您的參考數據移動到static final BLOCK_CAPITAL_NAME 。
不過,最重要的是: 用“”替換所有“最終”仍然是我做過的最令人滿意的一些重構。
翻譯自: https://www.javacodegeeks.com/2019/08/final-word-final.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的关于“最终”的最终决定的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 盘点iPhone 15“借鉴
- 下一篇: 通过MicroProfile上下文传播增