电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Java枚舉類使用場景及實(shí)例解析

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

為什么要用枚舉類

什么場景會(huì)用到枚舉,比如在表示一周的某一天,一年中的四季,這樣一組常量的時(shí)候我們會(huì)用到枚舉。在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;

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

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

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

初學(xué)者容易直接把字符串常量硬編碼到代碼中,不使用對(duì)應(yīng)的常量字段(filed)名,一旦書寫錯(cuò)誤,編譯器無法檢查,但在運(yùn)行時(shí)會(huì)報(bào)出異常

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

因此Java引入了枚舉類型解決int和String枚舉模式帶來的諸多不足,枚舉類型保證了編譯時(shí)的類型安全,枚舉類型有自己獨(dú)立的命名空間,枚舉類型便于擴(kuò)展,可以添加方法和域?qū)崿F(xiàn)其他的外部接口。

如何使用枚舉類

創(chuàng)建枚舉類

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

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

枚舉類API

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

name public final String name()

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

ordinal public final int ordinal()

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

toString public String toString()

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

重寫: toString 在 Object

compareTo public final int compareTo(E o)

將此枚舉與指定的對(duì)象進(jìn)行比較以進(jìn)行訂購。 返回一個(gè)負(fù)整數(shù),零或正整數(shù),因?yàn)樵搶?duì)象小于,等于或大于指定對(duì)象。 枚舉常數(shù)僅與相同枚舉類型的其他枚舉常量相當(dāng)。 該方法實(shí)現(xiàn)的自然順序是聲明常量的順序。

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

參數(shù) :o - 要比較的對(duì)象。

結(jié)果 :負(fù)整數(shù),零或正整數(shù),因?yàn)樵搶?duì)象小于,等于或大于指定對(duì)象。

getDeclaringClass public final Class<E> getDeclaringClass()

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

結(jié)果:該類對(duì)象對(duì)應(yīng)于此枚舉常量的枚舉類型

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

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

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

values

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

枚舉應(yīng)用案例

上面簡單描述了如何聲明一個(gè)枚舉類,這里結(jié)合實(shí)際應(yīng)用場景描述枚舉的其他用法

單例設(shè)計(jì)模式

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

構(gòu)造方法私有化; 實(shí)例化的變量引用私有化; 獲取實(shí)例的方法共有。

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

使用枚舉方式創(chuàng)建單例的好處:

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

有窮對(duì)象集合

枚舉類型中的構(gòu)造器默認(rèn)私有化,只能添加private修飾或者不添加

枚舉類型中定義的抽象方法必須被所有常量中的具體方法所覆蓋,特定于常量的方法實(shí)現(xiàn)可以結(jié)合特定于常量的數(shù)據(jù)結(jié)合起來

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

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);}

調(diào)用枚舉中的方法

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) ); } }}

輸出結(jié)果

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

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

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 渣油泵,KCB齿轮泵,不锈钢齿轮泵,重油泵,煤焦油泵,泊头市泰邦泵阀制造有限公司 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | WTB5光栅尺-JIE WILL磁栅尺-B60数显表-常州中崴机电科技有限公司 | 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | 1000帧高速摄像机|工业高速相机厂家|科天健光电技术 | 机械加工_绞车配件_立式离心机_减速机-洛阳三永机械厂 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 | 彩超机-黑白B超机-便携兽用B超机-多普勒彩超机价格「大为彩超」厂家 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 不锈钢水箱生产厂家_消防水箱生产厂家-河南联固供水设备有限公司 | 送料机_高速冲床送料机_NC伺服滚轮送料机厂家-东莞市久谐自动化设备有限公司 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 【同风运车官网】一站式汽车托运服务平台,验车满意再付款 | 上海洗地机-洗地机厂家-全自动洗地机-手推式洗地机-上海滢皓洗地机 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 中细软知识产权_专业知识产权解决方案提供商 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 圆形振动筛_圆筛_旋振筛_三次元振动筛-河南新乡德诚生产厂家 | 展厅设计-展馆设计-专业企业展厅展馆设计公司-昆明华文创意 | 馋嘴餐饮网_餐饮加盟店火爆好项目_餐饮连锁品牌加盟指南创业平台 | 制丸机,小型中药制丸机,全自动制丸机价格-甘肃恒跃制药设备有限公司 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 山东柳店新能源科技有限公司| 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 亮点云建站-网站建设制作平台 | 地磅-电子地磅维修-电子吊秤-汽车衡-无人值守系统-公路治超-鹰牌衡器 | 螺纹三通快插接头-弯通快插接头-宁波舜驰气动科技有限公司 | 油液红外光谱仪-油液监测系统-燃油嗅探仪-上海冉超光电科技有限公司 | 海尔生物医疗四川代理商,海尔低温冰箱四川销售-成都壹科医疗器械有限公司 | 书法培训-高考书法艺考培训班-山东艺霖书法培训凭实力挺进央美 | 正压密封性测试仪-静态发色仪-导丝头柔软性测试仪-济南恒品机电技术有限公司 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 工控机-工业平板电脑-研华工控机-研越无风扇嵌入式box工控机 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 卫生人才网-中国专业的医疗卫生医学人才网招聘网站! |