統一的程式碼風格是團隊協作的基石。Java 慣例規定類名首字母大寫、變數與方法名採用駝峰式小寫開頭。本文介紹一個實用工具 ClassScanner,能自動掃描專案中的 .java 檔案,檢測類名與標識符是否符合 Java 命名規範,並報告違規位置。
首先遍歷標準 Java 函式庫原始碼目錄,運行 ClassScanner -a repository 將所有標準類名收集至倉庫檔案(Properties 格式),作為後續檢查的基準。
工具使用 StreamTokenizer 逐詞元解析每個 .java 檔案:
class 或 interface 關鍵字 → 記錄後續詞元為類名,存入 classMap 與 classes。import 或 package → 跳過該行剩餘內容。identMap。註解處理採用手動模式:將 / 設為普通字符,遇到 // 呼叫 discardLine(),遇到 /* */ 呼叫 eatComments() 跳過區塊註解。
classMap,若類名首字母為小寫 → 報告錯誤。identMap,排除標準類名與全大寫常量(長度 ≥3),若標識符首字母大寫 → 報告錯誤(去重顯示)。繼承 Hashtable,鍵對應 Vector 值集合,支援一個鍵映射多字串(如:檔案名 → 多個類名)。提供 add()、getVector()、printValues() 方法。
public static void main(String[] args) {
// 1. 載入或建立類名倉庫
// 2. 掃描當前目錄所有 .java 檔案
// 3. 單參數模式:檢查類名與標識符風格
// 4. 雙參數模式(-a):建立/更新倉庫
}
# 建立標準類名倉庫
java ClassScanner stdclasses -a
# 檢查當前專案風格
java ClassScanner stdclasses
優點:自動化程度高、支援增量倉庫、去重報告減少噪音、原始碼開放易擴展。
缺點:基於 StreamTokenizer 解析,無法完美處理泛型、註解、Lambda 等現代語法;可能產生誤報(如內部類、特殊命名慣例),需人工複核。
ClassScanner 雖非完美,但作為輕量級靜態檢查工具,能大幅減少人工 Code Review 的負擔。對於追求代碼規範的團隊,整合至 CI 流程或 IDE 外部工具,是低成本提升代碼質量的有效手段。