一文搞懂Java項目中枚舉的定義與使用
什么是枚舉
最近寫新項目!有很多數(shù)據(jù)字典常量需要定義和使用、就順便記錄一下、什么是枚舉類呢?就是用enum修飾是一種Java特殊的類,枚舉是class、底層是繼承了java.lang.Enum類的實體類、使用枚舉可以很方便的定義數(shù)據(jù)常量、方便清晰我們使用
為什么需要枚舉類
下面就舉例說明一下吧
1)出于類型安全考慮,沒用枚舉類之前,常用靜態(tài)常量來表示。 比如對于性別的表示:
public static final int WOMAN = 0; public static final int MAN = 1;
這種性別定義實際上是一個整數(shù)數(shù)據(jù)類型。首先,這些變量可用于加減運算。當(dāng)然我們很少這樣干 第二,含義不明確。我們調(diào)試的時候,最初將“男”輸出到,結(jié)果為1。因此,我們必須在前面尋找0的含義,尤其是當(dāng)我們查看其他人的代碼時。會看不懂、定義枚舉類在類里面進行詳細(xì)說明這樣的話就能清楚的知道含義。
2) 代碼更優(yōu)雅
在項目大一點當(dāng)中,可以使用數(shù)百個靜態(tài)常量。如果它們都寫在一個文件類里面的話,很容易造成命名混亂,程序也很難讀取。
3) 枚舉類可以幫助我們定義所需的類型
枚舉易于記憶和使用,相當(dāng)于一個接口。使用時,只需封裝內(nèi)部數(shù)據(jù)類型并限制數(shù)據(jù)字段。此外,可以為不同的枚舉變量調(diào)用不同的處理方法(這可以通過實現(xiàn)枚舉類的抽象方法來實現(xiàn))。
枚舉類的定義和使用
下面就定義一個試題類型的枚舉類吧
/**
* 試題類型 枚舉類; 0 填空題、1 判斷 題、2 單選題、3 多選題、4 簡答題、5 問答題、6 論述題、7 計算題、8 畫圖題、9 其他題
* @author lyy
* @date 2022/05/23
*/
public enum TopicTypeEnum {
/** 填空題 */
FILL_IN_THE_BLANK(0, "填空題"),
/** 判斷題 */
JUDGE(1, "判斷題"),
/** 單選題 */
SINGLE_CHOICE(2, "單選題"),
/** 多選題 */
MULTIPLE_CHOICE(3, "多選題"),
/** 簡答題 */
BRIEF_ANSWER(4, "簡答題"),
/** 問答題 */
QUESTIONS_AND_ANSWERS(5, "問答題"),
/** 論述題 */
DISCUSS(6, "論述題"),
/** 計算題 */
COMPUTE(7, "計算題"),
/** 畫圖題 */
//最后一個類型必須要用分號結(jié)束
DRAW_PICTURE(9, "畫圖題");
/** 值 */
private final Integer code;
/** 名稱 */
private final String name;
public static TopicTypeEnum getByCode(Integer code) {
if (null == code) {
return null;
}
for (TopicTypeEnum status : TopicTypeEnum.values()) {
if (status.getCode().intValue() == code.intValue()) {
return status;
}
}
return null;
}
public static TopicTypeEnum getByName(String name) {
for (TopicTypeEnum status : TopicTypeEnum.values()) {
if (status.getName().equals(name)) {
return status;
}
}
return null;
}
public static List<NameCode> getNameCode() {
return Stream.of(TopicTypeEnum.values())
.map(item -> new NameCode(item.getCode(), item.getName()))
.collect(Collectors.toList());
}
TopicTypeEnum (Integer code, String name) {
this.code = code;
this.name = name;
}
public Integer getCode() {
return code;
}
public String getName() {
return name;
}
/**
* @author lyy
* @date 2022/06/14
* @return 枚舉對象數(shù)組
*/
public static List<Map<String, Object>> toList() {
List<Map<String, Object>> list = new ArrayList<>();
for (TopicTypeEnum item : TopicTypeEnum.values()) {
Map<String, Object> map = new HashMap<>();
map.put("code", item.getCode());
map.put("name", item.getName());
list.add(map);
}
return list;
}枚舉類的常用方法
- valueOf():返回當(dāng)前枚舉類的name屬性,如果沒有,則throw new java.lang.IllegalArgumentException()。具體可以查看java.lang.Enum源碼。
- values():返回包括所有枚舉變量的數(shù)組。
- toString(),name():返回當(dāng)前枚舉類變量的name屬性
- ordinal():枚舉類會給所有的枚舉變量一個默認(rèn)的次序,該次序從0開始,是根據(jù)我們定義的次序來排序的。而ordinal()方法就是獲取這個次序(或者說下標(biāo))。
- compareTo():返回兩個次序相減后的結(jié)果。
到此這篇關(guān)于一文搞懂Java項目中枚舉的定義與使用的文章就介紹到這了,更多相關(guān)Java枚舉內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Boot整合?NoSQL?數(shù)據(jù)庫?Redis詳解
這篇文章主要為大家介紹了Spring?Boot整合?NoSQL?數(shù)據(jù)庫?Redis詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09
java實現(xiàn)簡單學(xué)生成績管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)簡單學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
springboot中rabbitmq實現(xiàn)消息可靠性機制詳解
這篇文章主要介紹了springboot中rabbitmq實現(xiàn)消息可靠性機制詳解,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
Spring BeanFactory和FactoryBean有哪些區(qū)別
這篇文章主要介紹了Spring BeanFactory 與 FactoryBean 的區(qū)別詳情,BeanFactory 和 FactoryBean 的區(qū)別卻是一個很重要的知識點,在本文中將結(jié)合源碼進行分析講解,需要的小伙伴可以參考一下2023-02-02
Java輕松掌握面向?qū)ο蟮娜筇匦苑庋b與繼承和多態(tài)
本文主要講述的是面向?qū)ο蟮娜筇匦裕悍庋b,繼承,多態(tài),內(nèi)容含括從封裝到繼承再到多態(tài)的所有重點內(nèi)容以及使用細(xì)節(jié)和注意事項,內(nèi)容有點長,請大家耐心看完2022-05-05
java設(shè)計簡單學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java設(shè)計簡單學(xué)生管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09

