Java是一種強類型語言。通俗說就是,在Java中存儲的數據都是有類型的,而且必須在編譯時就確定其類型。 編程規範里,也強調數據要有明確的數據類型。這樣會讓代碼變得很清晰,而且會規避不必要的麻煩。 ...
▄︻┻┳═一Agenda:
▄︻┻┳═一(1/7)[代碼整潔之道]你真的會用枚舉嗎?非也!
▄︻┻┳═一(2/7)枚舉的錯誤用法 之 方法參數
▄︻┻┳═一(3/7)枚舉的錯誤用法 之 方法參數(二)
▄︻┻┳═一(4/7)枚舉的錯誤用法 之 方法返回值
▄︻┻┳═一(5/7)枚舉的錯誤用法 之 方法體內部
▄︻┻┳═一(6/7)枚舉的錯誤用法 之 分支判斷
▄︻┻┳═一(7/7)藉助枚舉說一下數據類型定義規範
Java是一種強類型語言。通俗說就是,在Java中存儲的數據都是有類型的,而且必須在編譯時就確定其類型。
編程規範里,也強調數據要有明確的數據類型。這樣會讓代碼變得很清晰,而且會規避不必要的麻煩。
通常在沒有特殊需要的情況下,時間就用Date類型、字元就用char、是/否就用bool、數字就用數值類型。每種數據類型都有其可存儲的數據和限定的取值範圍。不要什麼都用object,什麼都用String,靈活自由往往會帶來更多隱患。紅燈亮了,你還想自由自在的穿過馬路,也許紅綠燈的倒計時就是生命的倒計時。
本系列的主題是討論枚舉的使用規範。那麼,我們看下麵代碼截圖,
上面截圖中所調用的方法updateRpmOrderStatus有4個參數,類型都是String。這個方法的作用是變更訂單的支付狀態。4個參數分別是新的支付狀態、訂單支付日期、訂單號、原支付狀態。其中,訂單支付日期和訂單號是表的主鍵,唯一決定一條記錄,原支付狀態是為了樂觀鎖的控制。
/** * 更新訂單狀態 * @param createDate 訂單創建日期 * @param orderNo 訂單號 * @param status 需更新的下一個狀態 * @param processStatus 當前狀態 * @return */ public int updateRpmOrderStatus( String status, String createDate, String orderNo, String processStatus) { return rpmOrdMapper.updateRpmOrderStatus(status, createDate, orderNo, processStatus); }
上面截圖裡是調用該方法時的語句如下,因為搞錯了順序而導致了BUG。
int update = rpmOrdService.updateRpmOrderStatus(reqBO.getCreDt(), reqBO.getOrderNo(), OrdStsEnum.D_CLOSED.getSts(), rpmOrder.getOrdSts());
參數類型是String,傳的也是String,編譯沒問題,但是邏輯錯了。
如果把第一個參數“新的支付狀態”重(限)構(定)為枚舉類型,就不會出現這樣的BUG了。
重構後代碼截圖如下,註意我把status重命名為newStatus了。