日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java枚舉類使用場景及實例解析

瀏覽:242日期:2022-09-03 10:53:17

為什么要用枚舉類

什么場景會用到枚舉,比如在表示一周的某一天,一年中的四季,這樣一組常量的時候我們會用到枚舉。在Java引入枚舉類之前常用一組int常量來表示枚舉,這種方式稱為int枚舉模式(int enum pattern)。

private static final int MONDAY = 1;private static final int TUESDAY = 2;private static final int WEDNESDAY = 3;private static final int THURSDAY = 4;

private static final int CODE_START = 1;private static final int CODE_STATUS = 2;private static final int CODE_STOP = 3;

這種我們非常習慣的模式其實存在著很多不足和問題,

int枚舉組不具備命名空間的能力,當表示具有相同命名常量時,需要添加前綴避免沖突 int表示的枚舉值不具有描述性,需要遍歷判斷具體的值并添加描述 int枚舉模式不具有安全性,此外int類型是編譯時常量,如果與int枚舉常量關聯的值發生變化,必須重新編譯,不重新編譯雖然不影響運行,但是準確性已經不能保證

即便是升級為用String來表示枚舉值,String枚舉模式(String enum pattern),但這樣同樣存在其他問題,

初學者容易直接把字符串常量硬編碼到代碼中,不使用對應的常量字段(filed)名,一旦書寫錯誤,編譯器無法檢查,但在運行時會報出異常

String枚舉模式會存在一定的性能問題,涉及到字符串的比較操作

因此Java引入了枚舉類型解決int和String枚舉模式帶來的諸多不足,枚舉類型保證了編譯時的類型安全,枚舉類型有自己獨立的命名空間,枚舉類型便于擴展,可以添加方法和域實現其他的外部接口。

如何使用枚舉類

創建枚舉類

Java中枚舉是一種特殊的引用類型,是類(Class)的一種,JDK1.5中開始引入枚舉類型,在Java中使用enum關鍵字來聲明枚舉類,枚舉類編譯后默認繼承了java.lang.Enum,因此枚舉類不能在繼承其他類,枚舉一般用來聲明某一特定類型的有窮集合,如用枚舉表示四季

public enum Season { SPRING,SUMMER,FALL,WINTER}

枚舉類API

參考JDK api 1.8.CHM,可以看到枚舉類的常用api如下:

name public final String name()

返回此枚舉常量的名稱,與其枚舉聲明中聲明的完全相同。 大多數程序員應該使用toString()方法,因為toString方法可能會返回一個更加用戶友好的名稱。 該方法主要用于專門的情況,其中正確性取決于獲得確切的名稱,這從發布到發布不會有所不同。

ordinal public final int ordinal()

返回此枚舉常數的序數(其枚舉聲明中的位置,其中初始常數的序數為零)。 大多數程序員將不會使用這種方法。 它被設計為使用復雜的基于枚舉的數據結構,如EnumSet和EnumMap 。

toString public String toString()

返回聲明中包含的此枚舉常量的名稱。 該方法可以被覆蓋,盡管它通常不是必需或不可取的。 當一個更“程序員友好”的字符串形式存在時,枚舉類型應該覆蓋此方法。

重寫: toString 在 Object

compareTo public final int compareTo(E o)

將此枚舉與指定的對象進行比較以進行訂購。 返回一個負整數,零或正整數,因為該對象小于,等于或大于指定對象。 枚舉常數僅與相同枚舉類型的其他枚舉常量相當。 該方法實現的自然順序是聲明常量的順序。

Specified by: compareTo 在界面Comparable<E extends Enum<E>

參數 :o - 要比較的對象。

結果 :負整數,零或正整數,因為該對象小于,等于或大于指定對象。

getDeclaringClass public final Class<E> getDeclaringClass()

返回與此枚舉常量的枚舉類型相對應的Class對象。 當且僅當e1.getDeclaringClass()== e2.getDeclaringClass())時,兩個枚舉常量e1和e2具有相同的枚舉類型。 (此方法返回的值可能與使用常量特定類體的枚舉常數Object.getClass()方法返回的值不同)

結果:該類對象對應于此枚舉常量的枚舉類型

valueOf public static <T extends Enum<T>> T valueOf(Class <T> enumType,String name)

返回具有指定名稱的指定枚舉類型的枚舉常量。 該名稱必須與用于聲明此類型的枚舉常量的標識符完全一致。 (不允許使用外來空白字符。)請注意,對于特定枚舉類型T ,可以使用該枚舉上隱式聲明的public static T valueOf(String)方法,而不是使用此方法將名稱映射到

相應的枚舉常量。 枚舉類型的所有常量可以通過調用該類型的隱式public static T[] values()方法來獲得。

values

此方法并未在API中提供,返回枚舉類型所有對象實例,返回值枚舉類型的數組。

枚舉應用案例

上面簡單描述了如何聲明一個枚舉類,這里結合實際應用場景描述枚舉的其他用法

單例設計模式

說到單例模式很多人會比較熟悉懶漢、餓漢等常見的單例書寫模式,用枚舉表示枚舉還是比較少見的,對于單例設計模式的多種寫法,單元素的枚舉類型已經成為實現Singleton的最佳方法。首先回顧下單例設計模式要求滿足的特點:

構造方法私有化; 實例化的變量引用私有化; 獲取實例的方法共有。

public enum Singleton { INSTANCE; public Singleton getInstance(){ return INSTANCE; }}

使用枚舉方式創建單例的好處:

避免反射攻擊 避免序列化問題

有窮對象集合

枚舉類型中的構造器默認私有化,只能添加private修飾或者不添加

枚舉類型中定義的抽象方法必須被所有常量中的具體方法所覆蓋,特定于常量的方法實現可以結合特定于常量的數據結合起來

用枚舉表示加減乘除的操作

public enum Operation { PLUS('+','加法'){ public double apply(double x,double y){ return x + y; } }, MINUS('-','減法'){ public double apply(double x,double y){ return x - y; } }, TIMES('*','乘法'){ public double apply(double x,double y){ return x * y; } }, DIVIDE('/','除法'){ public double apply(double x,double y){ return x / y; } }; private final String symbol; private final String operName; public String getSymbol() { return symbol; } public String getOperName() { return operName; } Operation(String symbol, String operName){ this.symbol = symbol; this.operName = operName; } public abstract double apply(double x,double y);}

調用枚舉中的方法

public class TestOpera { public static void main(String[] args) { double x = 1; double y = 1; for(Operation operate : Operation.values()){ System.out.println( operate.getOperName()+':'+x+operate.getSymbol()+y+' = '+operate.apply(x,y) ); } }}

輸出結果

加法:1.0 + 1.0 = 2.0減法:1.0 - 1.0 = 0.0乘法:1.0 * 1.0 = 1.0除法:1.0 / 1.0 = 1.0

引入枚舉類型,不僅可以描述枚舉本身,還可以添加描述性字符串,甚至給每個對象添加結合特有常量的行為,也不用考慮其他安全性為題。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲一区二区三区高清不卡| 亚洲美洲欧洲综合国产一区| 国语精品一区| 久久久久久久欧美精品| 麻豆精品国产91久久久久久| 精品一区视频| 日韩免费一区| 日韩视频在线一区二区三区 | 日韩国产综合| 高清一区二区三区av| 久久成人一区| 欧美日韩精品免费观看视频完整| 免费在线播放第一区高清av| 亚洲免费观看高清完整版在线观| 亚洲三区欧美一区国产二区| 亚洲一区亚洲| 亚洲五月综合| 精品视频黄色| 国产精品黄色| 欧洲毛片在线视频免费观看| 亚洲二区视频| 久久久久久免费视频| 久久视频国产| 激情五月综合| 亚洲精品在线影院| 中文字幕日韩亚洲| 日产欧产美韩系列久久99| 色网在线免费观看| 久久精品中文| 亚洲日韩中文字幕一区| 国产精品亚洲综合久久| 91精品韩国| 国产欧美88| 日韩欧美一区二区三区免费观看| 亚洲综合三区| 正在播放日韩精品| 午夜电影一区| 婷婷国产精品| 最新国产精品久久久| 久久99性xxx老妇胖精品| 亚洲欧美日韩高清在线| 美女精品一区二区| 亚洲视频二区| 日韩精品永久网址| 国产精品17p| 亚洲影院天堂中文av色| 欧美13videosex性极品| 日韩欧美在线精品| 999久久久精品国产| 久久久久久久久成人| 亚洲影视一区| av成人国产| 亚洲午夜黄色| 色综合狠狠操| 欧美激情五月| 国产私拍福利精品视频二区| 喷白浆一区二区| 欧美福利一区| 91精品xxx在线观看| 国产一区国产二区国产三区| 亚洲欧洲美洲国产香蕉| 亚洲精选91| 青青草精品视频| 蜜臀a∨国产成人精品| 欧美日韩在线二区| 国产激情在线播放| 久久wwww| 久久精品国产999大香线蕉| 久久理论电影| 老司机免费视频一区二区| 国产精品麻豆成人av电影艾秋| 久久国产三级精品| 六月丁香综合在线视频| 成人污污视频| 亚洲www啪成人一区二区| 欧美一区二区性| 女同性一区二区三区人了人一| 日韩欧美三级| 91精品高清| 亚洲精品在线a| 欧美自拍一区| 97视频热人人精品免费| 欧美一区二区性| 亚洲www啪成人一区二区| 亚洲激情中文| 日韩免费精品| 日韩福利一区| 老牛影视一区二区三区| 国产乱人伦精品一区| 神马久久午夜| 中文字幕av一区二区三区人| 你懂的国产精品| 亚洲精品一区三区三区在线观看| 亚洲欧美视频| 成人精品高清在线视频| av不卡免费看| 精品欧美日韩精品| 日韩精品一二三四| 国内不卡的一区二区三区中文字幕 | 蜜臀精品一区二区三区在线观看| 日韩av成人高清| 免费福利视频一区二区三区| 日本成人一区二区| 亚洲电影在线| 精品国产精品久久一区免费式| 国产一区亚洲| 麻豆一区二区在线| 日本一区二区三区中文字幕| 999精品色在线播放| 老色鬼精品视频在线观看播放| 视频一区视频二区中文字幕| 免费一级欧美在线观看视频| 欧美中文日韩| 91精品国产调教在线观看| 国产精品日本一区二区三区在线| 黄色日韩在线| 日韩一区自拍| 国产精久久久| 国产毛片久久久| 亚洲精品一级二级三级| 国产一区亚洲| 日韩av在线播放网址| 偷拍亚洲精品| 中文精品电影| 国产精品腿扒开做爽爽爽挤奶网站| 国产激情久久| 国产精品一区2区3区| 丝袜美腿一区二区三区| 亚洲专区一区| 99xxxx成人网| 免费在线观看成人| 蜜桃久久久久久久| 免费在线观看精品| 日本少妇一区二区| 国产私拍福利精品视频二区| 国产精久久久| 日韩黄色大片网站| 久久在线视频免费观看| 91tv亚洲精品香蕉国产一区| 久久黄色影院| 蜜臀久久99精品久久久画质超高清| 99视频+国产日韩欧美| 亚洲欧美一区在线| 美日韩精品视频| 日本不卡视频在线观看 | 视频一区国产视频| 日韩精品视频网| 久久精品国产精品亚洲毛片| 日韩一区二区三区在线免费观看| 久久精品不卡| 亚洲啊v在线免费视频| 国产精品久久免费视频| 日韩另类视频| 亚洲免费观看高清完整版在线观| 欧美aaaaaa午夜精品| 久久久久久色 | 亚洲天堂黄色| 日韩视频1区| 美女福利一区二区三区| 亚洲一区欧美激情| 国产91在线播放精品| 丝袜美腿一区二区三区| 国产精品v一区二区三区| 日韩欧美中文| 日韩视频1区| 欧美+日本+国产+在线a∨观看| 亚洲精品无播放器在线播放| 手机在线电影一区| 亚洲影院天堂中文av色| 亚洲成人va| 国产91欧美| 久久精品 人人爱| 9色国产精品| 午夜欧美巨大性欧美巨大| 日韩和欧美一区二区| 三上悠亚国产精品一区二区三区 | 久久男女视频| 国产精品视频一区视频二区| 日韩视频网站在线观看| 国产精品一线天粉嫩av| 午夜日韩av| 婷婷综合六月| 日韩成人精品一区二区| 国产精品日韩精品在线播放| 婷婷亚洲精品| 日韩午夜高潮| 9色国产精品| 好吊日精品视频| 1024精品久久久久久久久| 动漫av一区| 精品国产一区二| 久久精品国产99国产精品| 精品一区二区三区中文字幕在线| 亚洲精品九九| 日韩av一区二| 国产午夜一区| 麻豆精品久久| 成人福利av| 亚洲午夜一级| 亚洲综合不卡|