強制性代碼中的命名不能以下劃線或美元符號開頭或結尾。
反例:_ name/_ _ name/$ name/name _/name $/name _ _
強制類型立即用括號連接起來表示數組。
正例:定義整數數組int[]array demo;反例:在主參數中,使用字符串args[]來定義。
強制POJO類中的布爾變量不要以is為前綴,否則某些幀解析會導致序列化錯誤。
註意:表示是或否的值命名為is_xxx,所以需要設置is_xxx到xxx的映射關系。
反例:定義為基本數據類型Boolean的屬性被刪除,其方法也被isDeleted()。RPC框架逆向解析時“誤以為”對應的屬性名被刪除,導致屬性未被獲取,然後拋出異常。
建議在命名常量和變量時,將表示類型的名詞放在詞末,以提高識別度。
建議接口類中的方法和屬性不要用任何符號修飾(也不應該是公共的),保持代碼簡潔,並添加有效的Javadoc註釋。盡量不要在接口中定義變量。如果必須定義變量,那麽變量必須與接口方法相關,並且是整個應用程序的基本常量。
正例:接口方法簽名void commit();
接口基本常量字符串COMPANY = " alibaba
反例:接口方法定義公共抽象void f();
描述:JDK8中的接口允許有壹個默認實現,所以這個默認方法對於所有實現類來說都是壹個有價值的默認實現。
引用枚舉類名的後綴是enum,枚舉成員的名字需要全部大寫,單詞之間用下劃線隔開。
描述:枚舉實際上是壹個特殊的類,域成員是常量,構造函數默認強制為私有。
正例:枚舉名為ProcessStatusEnum:SUCCESS/UNKNOWN _ REASON的成員名稱。
參考每層的命名約定:
1)獲取單個對象的方法以get為前綴。
2)獲取多個對象的方法以list為前綴,復數形式以:listObjects結尾。3)獲取統計值的方法以count為前綴。
4)插入方法以保存/插入為前綴。
5)刪除方法以remove/delete為前綴。
6)修改後的方法以update為前綴。
1)數據對象:xxxDO,xxx是數據表的名稱。
2)數據傳輸對象:xxxDTO,xxx是與業務領域相關的名稱。
3)顯示對象:xxxVO,xxx壹般是網頁的名稱。
4) POJO是DO/DTO/BO/VO的統稱,禁止命名為xxxPOJO。
強制代碼中不直接出現幻值(即未定義的常數)。
強制避免通過類的對象引用訪問類的靜態變量或靜態方法,這不必要地增加了編譯器的解析成本,可以直接用類名訪問。
只有強制參數類型相同,業務意義相同,才能使用Java變量參數,避免使用Object。
註意:變量參數必須放在參數列表的末尾。(鼓勵學生盡量不要用可變參數編程)
強制比較所有整數包裝類對象之間的值,並且它們都使用equals方法。
註:對於整數var =?對於-128到127範圍內的賦值,IntegerCache.cache中生成整數對象,現有對象將被重用。這個區間內的整數值可以用= =直接判斷,但是這個區間外的數據都會在堆上生成,現有對象不會被重用。這是個大坑,推薦equals法判斷。
基本數據類型和打包數據類型的使用標準如下:
註意:POJO類屬性沒有初始值,提醒用戶需要使用時必須進行顯式賦值。任何NPE問題或入庫檢查都由用戶擔保。
正例:數據庫的查詢結果可能為空,因為用基本數據類型自動拆包接收存在NPE風險。
反例:比如顯示總成交量的波動,即正負x%,其中x為基本數據類型。RPC服務調用不成功時,返回默認值,頁面顯示為0%,不合理,應該顯示為破折號。因此,包裝數據類型的空值可以表示附加信息,例如遠程調用失敗和異常退出。
強制POJO類編寫toString方法。
使用IDE中的工具:source & gt生成toString時,如果繼承了另壹個POJO類,註意在前面加上super.toString。
註意:當壹個方法拋出異常時,可以直接調用POJO的toString()方法打印其屬性值,方便故障排除。
強制處理hashCode和equals遵循以下規則:
描述:String覆蓋了hashCode和equals方法,所以我們可以愉快地使用String對象作為鍵。
強制線程資源必須通過線程池提供,不允許在應用程序中顯式創建線程。
說明:線程池的好處是減少創建和銷毀線程的時間和系統資源的開銷,解決資源不足的問題。如果不使用線程池,可能會導致系統創建大量相似的線程,從而導致內存耗盡或“過度切換”的問題。
不允許使用Executors創建強制線程池,而是使用ThreadPoolExecutor。這樣寫的同學可以更清楚線程池的運行規則,避免資源耗盡的風險。
上述規範是設計代碼的重要原則。如果在編碼的過程中能夠遵循以上原則,那麽代碼的可讀性和可維護性將會大大提高。