1.前語
重構(gòu)老代碼中遇到了不少相似下面這種寫法:
publicvoidattend(Stringvalue){if(“0”.equals(value)){//todo}elseif(“1”.equals(value)){//todo}else{//todo}
}
腦殼疼!從Java語法上無懈可擊,但是從事務(wù)上卻讓人無法了解其間0和1的含義它們統(tǒng)稱為魔法值。關(guān)于上面的代碼咱們往往需求經(jīng)過上下文揣度出來邏輯,如果是非常復(fù)雜的事務(wù)或許10年前的代碼那就更慘了,搞不好文檔也沒有。為了可讀性,所以咱們要盡量防止出現(xiàn)魔法值。今日就來講幾種防止魔法值的操作。
2.防止魔法值的一些操作。
一般魔法值都是不常常變化的。關(guān)于魔法值的處理要結(jié)合事務(wù)和作用域。
2.1靜態(tài)常量
如果該值的作用域在一個類中或許同一個包下,一般能夠運(yùn)用靜態(tài)常量來解決。
privatestaticfinalStringFEMALE=”0″;privatestaticfinalStringMALE=”1″;publicvoidattend(Stringvalue){if(FEMALE.equals(value)){//todo}elseif(MALE.equals(value)){//todo}else{//todo}
}
這樣是不是明晰了許多,本來0和1代表的是性別(當(dāng)然需求合作你良好的變量命名習(xí)氣)。
2.2運(yùn)用接口
已然咱們運(yùn)用了靜態(tài)常量那么咱們能夠?qū)⒛Хㄖ捣庋b入接口也是能夠的。
publicinterfaceGender{
StringFEMALE=”0″;
StringMALE=”1″;
}
2.3運(yùn)用枚舉
但是接口的含義在于提供抽象的功用而不是存儲一些常量值,明顯違反了接口規(guī)劃的初衷。所以jdk1.5引入了枚舉類型enum。
publicenumGenderEnum{
FEMALE,
MALE
}
許多情況這種寫法就夠用了,你能夠經(jīng)過GenderEnum.MALE.ordinal()獲取對應(yīng)枚舉的數(shù)字序號,也能夠經(jīng)過GenderEnum.MALE.name()獲取對應(yīng)枚舉的字符串稱號。他們大多數(shù)情況下都能夠用來進(jìn)行一些邏輯標(biāo)識。但是滿足不了咱們上面開始的規(guī)劃,咱們需求來改造一下枚舉類的結(jié)構(gòu)函數(shù)。
publicenumGenderEnum{
FEMALE(“0”),
MALE(“1”);privatefinalStringvalue;
GenderEnum(Stringvalue){this.value=value;
}publicStringvalue(){returnthis.value;
}
}
這樣改寫之后咱們就能經(jīng)過value()方法拿到具體的值了。
咱們給自己再增加點(diǎn)需求,以到達(dá)你的枚舉更加友愛的可讀性。
publicenumGenderEnum{
UNKNOWN(“-1″,”不知道”),
FEMALE(“0″,”女人”),
MALE(“1″,”男性”);privatefinalStringvalue;privatefinalStringdescription;
GenderEnum(Stringvalue,Stringdescription){this.value=value;this.description=description;
}publicStringvalue(){returnthis.value;
}publicStringdescription(){returnthis.description;
}
}
description值不但能夠幫助咱們知道該枚舉的實(shí)際代表含義,甚至能夠作為一種闡明返回給前端事務(wù)。
小貼士:枚舉盡量不要運(yùn)用中文聲明,如FEMALE直接聲明為女人。別的枚舉是單例的,因而無法運(yùn)用clone和反序列化。
3.總結(jié)
今日咱們了解了怎么優(yōu)雅處理編碼中的魔法值,特別是枚舉計劃。希望對你有用。
廣州天河區(qū)珠江新城富力盈力大廈北塔2706
020-38013166(網(wǎng)站咨詢專線)
400-001-5281 (售后服務(wù)熱線)
深圳市坂田十二橡樹莊園F1-7棟
Site/ http://www.szciya.com
E-mail/ itciya@vip.163.com
品牌服務(wù)專線:400-001-5281
長沙市天心區(qū)芙蓉中路三段398號新時空大廈5樓
聯(lián)系電話/ (+86 0731)88282200
品牌服務(wù)專線/ 400-966-8830
旗下運(yùn)營網(wǎng)站:
Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號