最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的魔法值解決

 更新時(shí)間:2022年01月29日 08:39:45   作者:shenzhou_yh  
這篇文章主要介紹了Java中的魔法值解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java中的魔法值

背景

使用IDEA時(shí),啟用了阿里的代碼規(guī)范檢查,其中就有一項(xiàng)提示是不允許任何魔法值出現(xiàn)在代碼里,于是出于好奇就了解一下到底啥時(shí)魔法值。

介紹

魔法數(shù)值、魔法數(shù)字、魔法值,這是一個(gè)東西,不同的叫法。

魔法數(shù)字,在編程領(lǐng)域指的是莫名其妙出現(xiàn)的數(shù)字。數(shù)字的意義必須通過詳細(xì)閱讀才能推斷出來(lái)

if("1".equals(dangerKey)){
?? ??? ??? ?BigDecimal warningValue = new BigDecimal(JedisUtils.get(WARNING_VALUE_KEY));
?? ??? ??? ?model.addAttribute("isDanger", true);
?? ??? ??? ?model.addAttribute("warningValue", warningValue);
?? ??? ?}

上面代碼中的字符串1就是一個(gè)魔法值,在未讀整段代碼之前,我并不知道這個(gè)字符串1代表什么意思,只有把這個(gè)字符串帶入后面的代碼邏輯才能判斷該值的真實(shí)意義,而且如果多次出現(xiàn),這就大大的降低了代碼的可閱讀性。所以我們?cè)诖a中應(yīng)該極力避免產(chǎn)生魔法值。

解決方法

** 使用枚舉類型或者使用static final修飾常量 **

//預(yù)警值標(biāo)識(shí)
?? ?public static final String DANGERKEY_TRUE ="1";
?? ?if(DANGERKEY_TRUE.equals(dangerKey)){
?? ??? ??? ?BigDecimal warningValue = new BigDecimal(JedisUtils.get(WARNING_VALUE_KEY));
?? ??? ??? ?model.addAttribute("isDanger", true);
?? ??? ??? ?model.addAttribute("warningValue", warningValue);
?? ??? ?}

以上就是使用static final的方式替換的魔法值,這樣就可以避免了。如果在代碼中多次使用的話,只需更聲明的地方就可以達(dá)到全局的效果。

提示:靜態(tài)常量的命名最好全是大寫字母,如果是多個(gè)單詞需要分割,可以使用下劃線分割。

小結(jié):魔法值的問題對(duì)于代碼邏輯來(lái)說,并不是什么要命的事情,即使不修改也基本不影響代碼的正常運(yùn)行,我以前沒有安裝阿里代碼檢查規(guī)范時(shí),一樣這么使用,也沒出現(xiàn)過啥問題。好吧,應(yīng)該說但是了。但是,遵循公認(rèn)的代碼規(guī)范,可以有效的避免開發(fā)過程的一些小問題(最讓人頭疼的往往都是一些小問題引起的),提升開發(fā)的效率和代碼的可閱讀性,老老實(shí)實(shí)按照規(guī)范來(lái),自然就會(huì)受益良多,繼續(xù)加油! 

Java的魔法值概念

想象一下,當(dāng)你入職一家新公司,打開工具看以前同事的項(xiàng)目時(shí),突然看到下面這段代碼

String[] catNames = new String[7];
String[] dogNames = new String[7];
for(int i = 0; i < 7; i++) {
?? ?//此處省略若干行
}

你心中一定很凌亂,可能還會(huì)在心底默默問候下寫這段代碼的前同事。

在沒有注釋的情況下,此處的i < 7,你根本無(wú)法知道是要處理 dogNames數(shù)組還是catNames數(shù)組,你還要繼續(xù)去看循環(huán)體中的內(nèi)容才能來(lái)推斷這個(gè)數(shù)字的含義。這里的7就是魔法值。

所謂的魔法值,就是指在代碼中直接出現(xiàn)的數(shù)值,只有在這個(gè)數(shù)值記述的那部分代碼中才能明確了解其含義。

魔法值簡(jiǎn)單好用,任何項(xiàng)目基本上都會(huì)有魔法值的出現(xiàn)。但魔法值就像一段沒有注釋的代碼,它的出現(xiàn)使得程序的可讀性大大下降,甚至只有當(dāng)事人才知道。這對(duì)于項(xiàng)目或者別的開發(fā)來(lái)說,無(wú)疑都是不利的。同時(shí),如果到處用到魔法值,那需要修改的時(shí)候,就要修改很多地方,這不僅耗費(fèi)時(shí)間,還很容易會(huì)遺漏。

魔法值的問題就是含義不明且無(wú)法統(tǒng)一使用,要把它們統(tǒng)一表示,并加上注釋,我們可以用static final 定義常量或使用enum值。

static final int CAT_NUM = 7;
String[] catNames = new String[CAT_NUM];
for(int i = 0; i < CAT_NUM; i++) {
?? ?//此處省略若干行
}
for(int i = 0; i < PET.DOG.getNum(); i++) {
?? ?//此處省略若干行
}?

當(dāng)然此處用catNames.length,dogNames.length也不會(huì)引起混淆。

其實(shí)魔法值也并不是要完全禁止不用,畢竟每次用到數(shù)值就要去定義常量或者在enum中新增元素還是很麻煩的。只要保障你的數(shù)值不會(huì)讓別人難以閱讀,你就可以使用魔法值。一般 -1、0 和 1不被視為魔法值。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解讀CommandLineRunner或者ApplicationRunner接口

    解讀CommandLineRunner或者ApplicationRunner接口

    這篇文章主要介紹了解讀CommandLineRunner或者ApplicationRunner接口的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 深度源碼解析Java 線程池的實(shí)現(xiàn)原理

    深度源碼解析Java 線程池的實(shí)現(xiàn)原理

    如何高效的使用這些資源就是程序員在平時(shí)寫代碼時(shí)候的一個(gè)努力的方向。本文要說的線程池就是一種對(duì) CPU 利用的優(yōu)化手段。對(duì)Java 線程池的實(shí)現(xiàn)原理相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-05-05
  • MyBatis-Plus中使用EntityWrappe進(jìn)行列表數(shù)據(jù)倒序設(shè)置方式

    MyBatis-Plus中使用EntityWrappe進(jìn)行列表數(shù)據(jù)倒序設(shè)置方式

    這篇文章主要介紹了MyBatis-Plus中使用EntityWrappe進(jìn)行列表數(shù)據(jù)倒序設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot詳解如何實(shí)現(xiàn)讀寫分離

    SpringBoot詳解如何實(shí)現(xiàn)讀寫分離

    當(dāng)響應(yīng)的瓶頸在數(shù)據(jù)庫(kù)的時(shí)候,就要考慮數(shù)據(jù)庫(kù)的讀寫分離,當(dāng)然還可以分庫(kù)分表,那是單表數(shù)據(jù)量特別大,當(dāng)單表數(shù)據(jù)量不是特別大,但是請(qǐng)求量比較大的時(shí)候,就要考慮讀寫分離了.具體的話,還是要看自己的業(yè)務(wù)...如果還是很慢,那就要分庫(kù)分表了...我們這篇就簡(jiǎn)單講一下讀寫分離
    2022-05-05
  • 解決Java項(xiàng)目啟動(dòng)報(bào)錯(cuò):Logback?configuration?error?detected:問題

    解決Java項(xiàng)目啟動(dòng)報(bào)錯(cuò):Logback?configuration?error?detected:問題

    這篇文章主要介紹了解決Java項(xiàng)目啟動(dòng)報(bào)錯(cuò):Logback?configuration?error?detected:問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java泛型通配符的使用詳解

    Java泛型通配符的使用詳解

    本文主要介紹了Java泛型通配符的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • SpringBoot訪問請(qǐng)求404解決方法

    SpringBoot訪問請(qǐng)求404解決方法

    這篇文章主要介紹了SpringBoot訪問請(qǐng)求404解決方法,文中有詳細(xì)的解決方法供大家參考,對(duì)我們學(xué)習(xí)或工作有一定的幫助,需要的朋友跟著小編一起來(lái)學(xué)習(xí)吧
    2023-07-07
  • java多線程之線程,進(jìn)程和Synchronized概念初解

    java多線程之線程,進(jìn)程和Synchronized概念初解

    這篇文章主要介紹了java多線程之線程,進(jìn)程和Synchronized概念初解,涉及進(jìn)程與線程的簡(jiǎn)單概念,實(shí)現(xiàn)多線程的方式,線程安全問題,synchronized修飾符等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • Java的Struts框架中配置國(guó)際化的資源存儲(chǔ)的要點(diǎn)解析

    Java的Struts框架中配置國(guó)際化的資源存儲(chǔ)的要點(diǎn)解析

    這篇文章主要介紹了Java的Struts框架中配置國(guó)際化的資源存儲(chǔ)的要點(diǎn)解析,針對(duì)用戶所使用的語(yǔ)言來(lái)配置資源文件,需要的朋友可以參考下
    2016-04-04
  • IDEA如何設(shè)置SVN提交忽略文件 target.iml

    IDEA如何設(shè)置SVN提交忽略文件 target.iml

    使用IDEA的SVN插件時(shí),可能會(huì)遇到提交不必要文件的問題,解決這個(gè)問題有兩種方法:第一種是在IDEA設(shè)置中的File Types下的Ignore files and folders添加需要忽略的文件或文件夾;第二種是使用SVN客戶端TortoiseSVN,在項(xiàng)目目錄點(diǎn)擊右鍵選擇properties
    2024-10-10

最新評(píng)論

阿城市| 乐都县| 白水县| 合山市| 牟定县| 社会| 咸阳市| 内黄县| 东安县| 五家渠市| 扶绥县| 新乐市| 元氏县| 景洪市| 新疆| 楚雄市| 盘锦市| 德兴市| 杭锦后旗| 察雅县| 廉江市| 嘉黎县| 沅江市| 西乡县| 桦南县| 新密市| 通城县| 濉溪县| 浏阳市| 阜阳市| 姚安县| 富锦市| 文水县| 华宁县| 荥阳市| 信丰县| 鄂托克前旗| 如皋市| 偃师市| 平原县| 新余市|