日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 不要使用魔法值_Java代码中的魔法值

發(fā)布時間:2024/9/27 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 不要使用魔法值_Java代码中的魔法值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

所謂魔法值,是指在代碼中直接出現的數值,只有在這個數值記述的那部分代碼中才能明確了解其含義。

1. 前言

重構老代碼中遇到了不少類似下面這種寫法:

public void attend(String value) {

if ("0".equals(value)) {

//todo

} else if ("1".equals(value)) {

//todo

} else {

//todo

}

}

腦殼疼!從?Java?語法上無懈可擊,但是從業(yè)務上卻讓人無法理解其中 0 和 1 的含義它們統稱為魔法值?。 對于上面的代碼我們往往需要通過上下文推斷出來邏輯,如果是非常復雜的業(yè)務或者10年前的代碼那就更慘了,搞不好文檔也沒有。為了可讀性,所以我們要盡量避免出現魔法值。今天就來講幾種避免魔法值的操作。

2. 避免魔法值的一些操作。

一般魔法值都是不經常變動的。對于魔法值的處理要結合業(yè)務和作用域。

2.1 靜態(tài)常量

如果該值的作用域在一個類中或者同一個包下,一般可以使用靜態(tài)常量來解決。

private static final String FEMALE = "0";

private static final String MALE = "1";

public void attend(String value) {

if (FEMALE.equals(value)) {

//todo

} else if (MALE.equals(value)) {

//todo

} else {

//todo

}

}

這樣是不是清晰了許多,原來 0 和 1 代表的是性別(當然需要配合你良好的變量命名習慣)。

2.2 使用接口

既然我們使用了靜態(tài)常量那么我們可以將魔法值封裝入接口也是可以的。

public interface Gender {

String FEMALE = "0";

String MALE = "1";

}

2.3 使用枚舉

但是接口的意義在于提供抽象的功能而不是存儲一些常量值,顯然違背了接口設計的初衷。所以jdk1.5引入了枚舉類型 enum。

public enum GenderEnum {

FEMALE,

MALE

}

很多情況這種寫法就夠用了,你可以通過 GenderEnum.MALE.ordinal() 獲取對應枚舉的數字序號,也可以通過GenderEnum.MALE.name() 獲取對應枚舉的字符串名稱。他們大多數情況下都可以用來進行一些邏輯標識。但是滿足不了我們上面最初的設計,我們需要來改造一下枚舉類的構造函數。

public enum GenderEnum {

FEMALE("0"),

MALE("1");

private final String value;

GenderEnum(String value) {

this.value = value;

}

public String value() {

return this.value;

}

}

這樣改寫之后我們就能通過 value() 方法拿到具體的值了。

我們給自己再增加點需求,以達到你的枚舉更加友好的可讀性。

public enum GenderEnum {

UNKNOWN("-1", "未知"),

FEMALE("0", "女性"),

MALE("1", "男性");

private final String value;

private final String description;

GenderEnum(String value, String description) {

this.value = value;

this.description = description;

}

public String value() {

return this.value;

}

public String description() {

return this.description;

}

}

description 值不但可以幫助我們知道該枚舉的實際代表意義,甚至可以作為一種說明返回給前端業(yè)務。

小貼士:枚舉盡量不要使用中文聲明,如?FEMALE?直接聲明為?女性。另外枚舉是單例的,因此無法使用clone和反序列化。

3. 總結

今天我們了解了如何優(yōu)雅處理編碼中的魔法值,特別是枚舉方案。希望對你有用。

原文:https://www.cnblogs.com/aaaazzzz/p/14373257.html

總結

以上是生活随笔為你收集整理的java 不要使用魔法值_Java代码中的魔法值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。