您好,登錄后才能下訂單哦!
代碼檢查服務是如何降低Billion DollarMistake NPE風險,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
“空安全(Null Safety)”是Kotin最吸引Java開發者的特性之一, Kotlin類型系統的目標是消除Null reference的危險性。Tony Hoare在2019年QCon London上將Null reference稱為“my billion-dollar mistake”。所謂Null reference是許多編程語言最為常見的陷阱之一,指的是訪問Null reference的成員將導致null reference exception。在Java語言中,Nullreference通常等同于NullPointerException(即NPE)。
對于Java開發者來講,或許只有處理過了NPE,才能成為一名真正的Java開發者。NPE通常來講,會來自于以下場景:
調用了一個空對象的實例方法;
訪問或者修改一個空對象的域成員;
當數組是一個空對象時,取它的長度;
對數組中的某些null元素進行范文或者修改;
將null當做Throwable值拋出
如何防止NPE,簡單來講,主要是兩點要素:手段與方法、意識與經驗。Java開發者可以參考以下最佳實踐來防空:
通過已知字符串常量而不是未知對象來調用equals()與equalsIgnoreCase()方法
在valueOf()與toString()返回相同結果的地方優先使用valueOf()
使用null安全的方法與庫
避免從方法中返回null,而是返回空的collection或者array
使用注解@NotNull和@Nullable
在代碼中避免不必要的autoboxing和unboxing
遵循Contract并定義合理的缺省值
在Java 8中使用Optional
雙重入參校驗
盡管Java開發者能力對于防空是至關重要的,然而人難免會有所失誤。為了進一步降低風險,華為云DevCloud建議項目或者產品團隊使用代碼檢查服務來檢查是否存在NPE。
Code4Benchmark是采用Java開發的示例工程,希望用于評估代碼質量評估工具或者云服務對代碼問題的檢查能力,例如空指針(Null Pointer)、資源泄露、SQL注入(SQL Injection)等。
對于空指針場景,目前主要是顯式解引用、前置判空、后置判空、空返回值等,代碼片段如下:
顯式解引用: 直接對null對象解引用
圖7 問題詳情與修改建議
NPE是Java開發中的經典問題,華為云DevCloud代碼檢查服務提供的規則不止本文提到的3條規則,具體可以在“規則”中查看。在實際的項目開發中,用戶可以直接選擇“全面檢查規則”來進行全方位的代碼質量檢測,以提升代碼質量。
W. Edwards Deming曾說過“Inspectionis too late. Quality cannot be inspected into a product or servive. It must bebuilt into it.”本質上,軟件質量取決于工程師的意識、能力、方法與技能。然而,工程師的意識、能力、方法與技能需要不斷提升。因而, 華為云DevCloud 代碼檢查服務在軟件交付中仍然具有舉足輕重的地位,不僅可以及時發現代碼質量問題,而且可以強化工程師的預期行為,有助于提升工程師的意識、能力、方法與技能。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。