注解代替枚举_精选枚举代替开关
注解代替枚舉
問題及其解決方案
開關/案例是用大多數命令式編程語言實現的通用控制結構。 開關比一系列的if / else更具可讀性。
這是一個簡單的示例:
// Switch with int literal switch (c) {case 1: one(); break;case 2: two(); break;case 3: three(); break;default: throw new UnsupportedOperationException(String.format("Operation %d is not supported", c)); }以下是此代碼中的主要問題列表:
最簡單的解決方法是使用int常量而不是文字。 首先,讓我們定義常量:
private static int ONE = 1; private static int TWO = 2; private static int THREE = 3;現在,代碼將如下所示:
switch (c) {case ONE: one(); break;case TWO: two(); break;case THREE: three(); break;default: throw new UnsupportedOperationException(String.format("Operation %d is not supported", c)); } (顯然,在現實生活中,常量的名稱必須是自描述的)
該代碼段更具可讀性,但所有其他缺點仍然相關。 改進初始代碼段的下一個嘗試使用2004年在版本5中引入Java語言的enums 。讓我們定義以下enum :
現在,開關片段將稍作更改:
Action a = ... switch (a) {case ONE: one(); break;case TWO: two(); break;case THREE: three(); break;default: throw new UnsupportedOperationException(String.format("Operation %s is not supported", a)); }這段代碼要好一些:如果從enum Action刪除其中一個元素,它將產生編譯錯誤。 但是,如果將其他元素添加到enum Action ,則不會導致編譯錯誤。 在這種情況下,某些IDE或靜態代碼分析工具可能會產生警告,但是誰在注意警告呢? 幸運的是, enum可以聲明必須由每個元素實現的抽象方法:
enum Action {ONE { @Override public void action() { } }, TWO { @Override public void action() { } }, THREE { @Override public void action() { } }, public abstract void action(); }現在,switch語句可以用單行替換:
Action a = ... a.action();此解決方案沒有上面列舉的任何缺點:
結論
盡管開關/外殼結構是眾所周知的,并且以各種編程語言廣泛使用,但是其使用可能會引起很多問題。 上面描述的使用Java枚舉的解決方案沒有這些缺點。 本系列的下一篇文章展示了如何擴展現有enum功能。
翻譯自: https://www.javacodegeeks.com/2019/03/featured-enum-instead-switch.html
注解代替枚舉
總結
以上是生活随笔為你收集整理的注解代替枚举_精选枚举代替开关的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哔咔安卓2.2.1.2.3.4版 (官方
- 下一篇: (linux 安装tar)