列舉Enum解決if else過多問題

2021-10-17 19:28:18 字數 1507 閱讀 6349

最近接觸網際網路專案,發現實際網際網路專案中有非常多的判斷,每次功能迭代,需求一旦變動,或者加個字段,**就會加一行if else,不得不說if else效率是很高,但是給後期可維護性,可讀性造成很大傷害,如果一連串的if else,幾個版本迭代下來,其他開發接手,都不敢動,更別提重構,只好又在後面再加乙個if else,這樣惡性迴圈。

解決if else,可以用設計模式,比如策略模式;巢狀if else,可以用責任鏈模式,這些設計模式可能對於那些新手crud程式設計師有點挑戰,所以我在這說一下最簡單的用列舉解決過多的if else

@test

public void areafix()

public static string gettarget(int value)

}return type_other.value;

}}

定義乙個列舉類,實際判斷區間的方法把他改為靜態方法

for是遍歷列舉下的所有條件,然後再判斷所在區間。實際呼叫的時候既可以直接呼叫靜態方法

@test

public void areafix2()

這樣一行**就可以解決過多的if else,而且擴充套件性極強,我要加151~200為重度汙染,只需要在列舉類加入

type_you(0,50,"優"),

type_liang(51,100,"良"),

type_jige(101,150,"輕度汙染"),

type_zhongdu(151,200,"重度汙染"),

type_other(-1,-1,"其他");

有其他條件再加即可,關鍵的業務**不需要改動,是不是很方便?

這裡注意的是type_you(0,50,"優"),裡面所用的值是和列舉的構造方法對應的,資料型別要對應。

typeenum(int begin,int end, string value)
還有一種複雜寫法,給列舉自定義方法實現,**如下

public enum area 

},area_51_100(51,100)

},area_101_150(101,150)

},area_other(-1,-1)

};private int beginpoint;

private int endpoint;

area(int beginpoint, int endpoint)

public abstract string handle();

public static string gettarget(int value)

}return area_other.handle();

}}

具體呼叫的話還是一樣的

@test

public void areafix3()

這樣的話,你可以在列舉的自定義方法中寫更複雜的操作,

**很簡單,重要的是學思想

使用列舉enum來代替if else

在平時的 中,if else肯定是必不可少,但是有時使用if else卻不是 的最好選擇,下面介紹下平時會在實際工作 中使用到的用enum來代替if else的寫法.現在有個需求,我們公司有vip等級,1,2,3,根據等級高低,能獲取不同的優惠資訊,最簡單也最容易想到的 是 獲取折扣資訊 publi...

列舉Enum優化大量if else的又一例項

當我需要呼叫其他其他介面,這個介面某個引數需要根據不同情況來傳遞不同的固定值 如 b介面呼叫a介面,a介面中需要傳遞授權碼,這個授權碼在不同的業務場景不同的手機系統需要傳遞不同的值,普通的傳值方式如下 public void notenum request req else if b equals ...

列舉enum學習

enum enumeration name chongqi 3 以上簡單地按區域,將五個城市按照華南 4 華東 2 華北 3 的幾個城市分類了。4 列舉變數的定義 初始化和賦值 至於列舉可以當作特定的整型數來用的例子,從open modes可以體會。7 自定義運算子 列舉是使用者自定義型別,所以在使...