2014-09-29 37 views
1

如果我的Enum常量名長度中的一個長度大於10個字符,我該如何拋出一個檢查異常來防止編譯代碼?枚舉常量名稱長度大於10個字符時拋出檢查異常?

+8

你不會在編譯時拋出異常。 – 2014-09-29 12:10:24

+3

編寫您自己的編譯器:) – Maroun 2014-09-29 12:12:14

+0

註釋枚舉並使用註釋處理器來檢查註釋枚舉的常量名稱。 – fabian 2014-09-29 12:18:39

回答

2

可能最實際的解決方案是使用Java風格檢查器,例如Checkstyle。然後使用構建工具(如Maven),如果樣式檢查失敗,則可以阻止構建成功。

這允許您然後檢查所有方式的東西,包括枚舉長度。儘管您可能需要爲此編寫自己的檢查程序 - 它聽起來有點具體。

+0

+1 checkstyle允許您定義enum常量(和其他變量名稱)必須遵循的格式,包括長度。 – 2014-09-29 13:20:10

0

在編譯時無法強制執行上述限制,因爲Java語言規範不限制標識符的長度(source):

變量的名稱可以是任何合法的標識符 - 無限長unicode編碼的字母和數字序列...

(注:但類文件格式不構成限制大約是64K,但它不是一個JLS限制)

最你能做的就是在運行時拋出一個Exception如果聲明的名稱太長,例如在枚舉的構造函數:

enum Fruit { 
    APPLE, 
    BANANA, 
    STRAWBERRIES; 

    private Fruit() { 
     if (name().length()>10) 
      throw new RuntimeException("Too long name: " + name()); 
    } 
} 

還要注意的是Enum構造函數只能拋出未檢查異常。