如果我的Enum常量名長度中的一個長度大於10個字符,我該如何拋出一個檢查異常來防止編譯代碼?枚舉常量名稱長度大於10個字符時拋出檢查異常?
1
A
回答
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
構造函數只能拋出未檢查異常。
相關問題
- 1. 按名稱檢索Scala枚舉常量
- 2. 檢查哪個變量拋出異常
- 3. 枚舉拋出concurrentModification異常。爲什麼?
- 4. java拋出檢查異常?
- 5. LINQ僅選擇拋出IOException異常時可枚舉的看着
- 6. 當投影到可爲空的枚舉時,AutoMapper拋出異常
- 7. 枚舉常量
- 8. 「破」與在「拋出StopIteration異常」一個Ruby枚舉
- 9. 獲取拋出異常的類名稱
- 10. Java枚舉與字符串常量
- 11. 枚舉的返回列表從字符串常量枚舉的名字值
- 12. ASP.NET WebService在拋出異常時返回異常字符
- 13. Java中拋出的大量異常
- 14. 魔術異常拋出拋出異常
- 15. 枚舉和常量
- 16. 分配一個InvalidValue以枚舉變量(這是爲什麼不拋出異常?)
- 17. 爲什麼使用字符串常量與枚舉常量?
- 18. 枚舉和常量。哪個使用時?
- 19. IntelliJ檢查 - 非拋出的異常
- 20. 拋出已檢查的異常
- 21. 檢查枚舉有等於字符串
- 22. 如何從枚舉構造函數中拋出異常?
- 23. 異常拋出異常
- 24. 拋出一個新的異常拋出一箇舊的異常
- 25. C#假枚舉TypeInitializationException異常
- 26. 查詢過拋出異常
- 27. JPA查詢拋出異常
- 28. 處理IntList.remove()拋出的ArrayIndexOutOfBounds:10異常
- 29. 拋出異常
- 30. 拋出異常
你不會在編譯時拋出異常。 – 2014-09-29 12:10:24
編寫您自己的編譯器:) – Maroun 2014-09-29 12:12:14
註釋枚舉並使用註釋處理器來檢查註釋枚舉的常量名稱。 – fabian 2014-09-29 12:18:39