魔功心法-枚舉篇

来源:https://www.cnblogs.com/LoveBB/archive/2023/04/04/17286874.html
-Advertisement-
Play Games

前言: https://www.cnblogs.com/LoveBB/p/17277662.html 什麼是枚舉 枚:量詞。一般用於較小的片狀物,相當於“個”。 舉:提出:列舉。舉一反三。舉個例子。 所以,枚舉就是一個個列舉出來 枚舉的作用 魔功的作用,就不過多描述了,主打的就是一個優雅。 枚舉的使 ...


前言:
https://www.cnblogs.com/LoveBB/p/17277662.html

什麼是枚舉

枚:量詞。一般用於較小的片狀物,相當於“個”。

舉:提出:列舉。舉一反三。舉個例子。

所以,枚舉就是一個個列舉出來

枚舉的作用

魔功的作用,就不過多描述了,主打的就是一個優雅。

枚舉的使用

枚舉的成員方法

在學習枚舉之前,我們很有必要瞭解他的幾個比較重要的成員方法。我們先定義一個枚舉如下:

public enum TestEnum {
}
  • 這裡可以看到,枚舉中有兩個比較重要的方法,分別是 values() 和 valueOf();
方法名稱 具體含義 使用方法
values() 該方法可以將枚舉類型成員以數組的形式返回 枚舉類型名稱.values()
valueOf() 該方法可以實現將普通字元串轉換為枚舉實例 枚舉類型名稱.valueOf("ABC")
  • 下麵我們隨便在枚舉中添加兩個屬性 boy 和 girl
// 規範寫法
public enum TestEnum {
    BOY,GIRL
}

// 屬性大寫只是一種規範,小寫也是可以的
public enum TestEnum {
    Boy,Girl
}

// 既然小寫可以,那麼亂寫也是沒有問題的
public enum TestEnum {
    BoY,giRL
}
  • 我們使用規範的方法,試試枚舉中的 values() 方法,這個方法是拿到 TestEnum 中的所有屬性,並且以數組的形式返回。


  • 試試枚舉中的 values() 方法

從上面可以看到,這三者的返回值是一樣的,類型都是 TestEnum。那這個方法就沒啥好看的了,就是拿到 TestEnum 中的單個屬性。

枚舉與常量類的對比

枚舉類

public enum TestEnum {
    BOY,GIRL
}

常量類

public class TestConstant {
    private static Integer BOY;
    private static Integer GIRL;
}
  • 枚舉和常量類的對比一目瞭然。但是一般情況下,我們使用常量類都是下麵這種形式。
public class TestConstant {
  	// 男
    private static final Integer BOY = 0;
    // 女
    private static Integer GIRL = 1;
}
  • 這樣看起來是不是更加親切了,那麼枚舉類應該怎麼寫呢,效果如下
@Getter
public enum TestEnum {
    BOY(0),GIRL(1);
    private Integer code;
    TestEnum(Integer code){
        this.code = code;
    }

}
  • 兩者使用對比
public static void main(String[] args) {
    // 使用常量類
    Integer boy = TestConstant.BOY;
    Integer girl = TestConstant.GIRL;

    // 使用枚舉
    Integer enumBoy = TestEnum.BOY.getCode();
    Integer girlCode = TestEnum.GIRL.getCode();
}

枚舉與常量類的使用

  • 眾所周知,我們對前端展示的 性別 這個屬性,一般在數據表中都是存 0,1。這樣的話,每次查詢和入庫都需要做轉換。
@Data
public class People {
   private String gender;
}
  • 常量類轉化
People people = new People();
// int 轉為 String
Integer boy = TestConstant.BOY;
if (boy == 0) {
    people.setGender("男");
}
Integer girl = TestConstant.GIRL;
if (girl == 1) {
    people.setGender("女");
}
  • 枚舉轉化
People people = new People();
// 使用枚舉
Integer enumBoy = TestEnum.BOY.getCode();
if (enumBoy == 0) {
    people.setGender("男");
}
Integer girlCode = TestEnum.GIRL.getCode();
if (girlCode == 1) {
    people.setGender("女");
}

毫無違和感,那還要枚舉幹啥勒。彆著急,下麵就介紹枚舉的另一種用法 :

@Getter
public enum TestEnum {
    BOY(0,"男"),GIRL(1,"女");
    private Integer code;
    private String name;
    TestEnum(Integer code,String name){
        this.code = code;
    }
}
  • 枚舉轉化 2
People people = new People();
// 使用枚舉
Integer enumBoy = TestEnum.BOY.getCode();
if (enumBoy == 0) {
    String name = TestEnum.BOY.getName();
    people.setGender(name);
}

Integer girlCode = TestEnum.GIRL.getCode();
if (girlCode == 1) {
    String name = TestEnum.GIRL.getName();
    people.setGender(name);
}

真好,如果工資是按代碼行數發的,那你就能多拿兩打工資了

  • 枚舉轉化3

上面 2 的寫法,基本上都是固定了,不符合面向對象的寫法,我們應該抽象出來這一個方法,方法的入參是 int 類型,返回值是 String 類型。比如傳入一個 0,返回一個男,傳入一個 1,返回一個女。這個時候前面的這個 values() 方法就派上用場了

@Getter
public enum TestEnum {
    BOY(0,"男"),GIRL(1,"女");
    private Integer code;
    private String name;
    TestEnum(Integer code,String name){
        this.code = code;
    }

    // 這個是抽象的方法,放在枚舉裡面 
    public static String getName(int code) {
        // 遍歷 TestEnum.values()
        for (TestEnum testEnum : TestEnum.values()) {
            // 如果枚舉 code 和傳入的 code相同,返回對應的文字
            if (testEnum.getCode() == code) {
                return testEnum.name;
            }
        }
        // 不匹配,返回預設值
        return null;
    } 

}
  • 使用方法改造
People people = new People();
// 使用枚舉
Integer enumBoy = TestEnum.BOY.getCode();
if (enumBoy == 0) {
    people.setGender(TestEnum.getName(0));
}

Integer girlCode = TestEnum.GIRL.getCode();
if (girlCode == 1) {
    people.setGender(TestEnum.getName(1));
}

是不是有高手那味了,這就是魔功枚舉的強大之處,隨隨便便一個常量,就硬生生給你整成高手範。


枚舉的進階

  • 完了嘛?如果只是簡單的使用,確實是完了,但是我們的追求遠不止如此,我們用了枚舉,就一定要用出高手風範:一切皆可枚舉

三屬性枚舉

要獲取每個網站的地址,要把每個網站的地址存儲起來,網站地址都是已知的。並且不做維護。

  • 如果要建立一張表,大概如下:

  • 如果我們用枚舉來實現,就是下麵這樣
@Getter
public enum InternetEnum {
    BAIDU(1,"百度","www.baidu.com"),
    HUOHU(2,"火狐","www.huohu.com"),
    GUGLE(3,"谷歌","www.guge.com"),
    SLO(4,"360","www.360.com"),
    QQ(5,"qq","www.qq.com");
    private Integer code;
    private String name;
    private String address;
    private InternetEnum(int code,String name,String address) {
    this.code = code;
    this.name = name;
    this.address = address;
    }

    private String getName(int code){
        for (InternetEnum internetEnum : InternetEnum.values()) {
            if (internetEnum.getCode()==code){
                return internetEnum.getName();
            }
        }
        return null;
    }

    private String getAddress(int code){
        for (InternetEnum internetEnum : InternetEnum.values()) {
            if (internetEnum.getCode()==code){
                return internetEnum.getAddress();
            }
        }
        return null;
    }
}

這裡只是舉個例子,前提是這些屬性不經常變的,如果是經常變的,還是得考慮使用數據表。至於哪些是不變的,如果你維護過別人的代碼,就一定能見過很多這樣的東西,這時候大膽使用枚舉改掉他。

N屬性

  • 有了三屬性,就有四屬性,五屬性,不知道,當你看到下麵這種枚舉的時候,你會不會陷入沉思,並且優雅親切來上一句問候

枚舉神奇之處

  • 枚舉用順手之後,萬物皆可枚舉
  • 對前端:傳 0,1 入參就行
  • 對數據表,咱就存 0,1 就行
  • 這樣一來,主動權就在你手裡了,當別人看著數據表一堆 0,1 陷入沉思的時候、當前端其他人來接手你的代碼時,前端傳給他一堆 0,1的時候,就是魔功顯示威力的時候。

作者:天下沒有收費的bug 出處:https://www.cnblogs.com/LoveBB/ 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文鏈接,否則保留追究法律責任的權利。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 異常的簡單分類 檢查性異常:最具代表性的檢查性異常是用戶錯誤或問題引起的異常,這是程式員無法預見的。例如用戶要打開一個不存在的文件,一個異常就發生了,這些異常在編譯時不能被簡單的忽略。 運行時異常:運行時異常是可能被程式員避免的異常,與檢查性異常相反,運行時異常可以在編譯時被忽略。 錯誤(error ...
  • 藍橋杯(全球變暖dfs) import java.util.Scanner; /** * 該題使用了深度優先演算法dfs用於把相連的#號當成一塊大陸,並通過數組記錄下有幾塊大陸 * dfs演算法並不難,只要對用dfs處理過後留下的aes數組和sea數組進行處理得到結果即可 * 我的思路就是 * 1、se ...
  • 搭建微服務基礎環境02 3.創建使用會員微服務模塊-service consumer 3.1需求分析 瀏覽器向service consumer請求某個數據,service consumer會去向service provider請求數據,然後將service provider返回的數據返回給瀏覽器。 ...
  • 之前學習時候,是使用老師的自定義的一個SpringMVC模式,今天突然好奇,官方的SpringMVC架構咋弄,於是帶著好奇的心去實現完成它 其實這個模式也比較簡單 1:首先,我們創建一個maven,web的網頁項目,JDK選擇1.8版本 2:在創建完之後,滑鼠右鍵點擊main目錄,同時選擇java和 ...
  • 1. 踩坑經歷 最近做了個需求,需要往公司微信公眾號推送一個模板消息,並且點擊該消息需要跳轉到公司小程式的某個頁面。 1.1 拿到模板id 既然是發送模板消息,第一步就需要登錄微信公眾號後臺新建模板消息,拿到模板id。 登錄地址:https://mp.weixin.qq.com 新建模板消息的方法如 ...
  • 勤學如春起之苗,不見其增日有所長;輟學如磨刀之石,不見其損日有所虧。 本文的重點:逃逸分析、延遲語句、散列表、通道、介面。 1.逃逸分析 逃逸分析是Go語言中的一項重要優化技術,可以幫助程式減少記憶體分配和垃圾回收的開銷,從而提高程式的性能。下麵是一道涉及逃逸分析的面試題及其詳解。 問題描述: 有如下 ...
  • Week0 Functions Indoor Voice 題目描述: 將輸入的字元串轉化為全部小寫的字元串; 思路: lower():轉換字元串中所有大寫字元為小寫。 題解: print(input().lower()) Playback Speed 題目描述: 將輸入的字元串中間空格部分替換為“. ...
  • 摘要:保證線程安全是 Java 併發編程必須要解決的重要問題,本文和大家聊聊Java中的併發原子類,看它如何確保多線程的數據一致性。 本文分享自華為雲社區《學了這麼久的高併發編程,連Java中的併發原子類都不知道?這也太Low了吧》,作者:冰 河。 今天我們一起來聊聊Java中的併發原子類。在 ja ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...