关于枚举

简介:

一个简单的例子:

 

枚举定义类:

 

 

 

测试类:

 

 

 

关键词:实例,常量

 

枚举也是一个类。从测试类的第5行知,枚举变量的声明与一般对象类的声明是相同的(Spiciness howHot = ...)

 

枚举定义类的第4行:NOT,MILD...,每一串字母都是一个实例,每一个实例都是常量。即:Spiciness这个枚举类在声明时与一般声明相同:Spiciness howHot=...,而等号后面的具体实例只能有五个值:Spiciness.NOT,Spiciness.MILD等等。

 

常量也有自己的方法

 

ordinal():某个enum实例在所有实例中的位置。(比如上例:Spiciness.MEDIUM.ordinal() == 2)。

注意,这里ordinal()是实例对象调用的。

 

values():静态方法,按照所有常量在枚举中的位置,返回所有常量构成的数组:

 

 

 

注意,values()是静态方法,直接用Spiciness调用。

 

关键词:java.lang.Enum

 

你创建enum时,编译器会为这个enum生成一个枚举类,这个类继承自:java.lang.Enum。

 

编译器会为这个枚举类自动加上toString()、hashCode()等方法,所以,在不同的枚举常量之间,可以用equals==去比较引用、比较值等:(注意equals==的区别,equalshashCode的关系)

 

 

Enum类实现了Comparable接口,所以,枚举之间可以用compareTo方法比较。

 

像一般类一样对待enum

 

 

看上面的代码,除了一些特殊的限制之外,enum也是一个类,它继承自Enum类,那么,我们就可以按照操作一般类的方式去操作enum

 

比如,第13行,加了一个私有构造器(私有构造器使得我们不能从类的外部使用new的方式创建一个实例,但对于枚举类,即使你在这里写一个public,我们也不能从外部创建实例,还是要从内部创建)。

 

1117行等,都是像一般类一样定义变量、方法。

 

而由于WEST、NORTH等本身就是enum内部创建的实例,那么由于你定义的构造函数中有参数,就要给WEST、NORTH等实例常量后面加上参数(类似于一般类创建实例的方式)。

 

不过这里有一个限制,在定义方法之前,必须首先定义enum实例,即:56789行必须写在前面。

 

关键词:switch

 

枚举本来就是常量,用在switch中再合适不过,用法也比较简单,举例略。

 

关键词:values()

 

前面说过,values()方法是一个静态方法,但更有趣的是,enum的父类Enum类是没有这个方法的,values()方法是enum在编译时,编译器加上的。

 

既然父类Enum没有values()方法,那如果把enum类“向上转型”为Enum类型,就访问不到values()方法了:

 

 

但是天无绝人之路,你如果真想获取实例常量数组的话,还是有办法的。通过反射获取enumClass,你会发现,Class正好有个getEnumConstants()可以满足你的需求:

 

 

 









本文转自xsster51CTO博客,原文链接:http://blog.51cto.com/12945177/1929780,如需转载请自行联系原作者




相关文章
|
人工智能 Ubuntu Linux
RK3568开发笔记(三):RK3568虚拟机基础环境搭建之更新源、安装网络工具、串口调试、网络连接、文件传输、安装vscode和samba共享服务
开始搭建RK3568的基础虚拟机,具备基本的通用功能,主要包含了串口工具minicom,远程登陆ssh,远程传输filezilla,代码编辑工具vscode。
RK3568开发笔记(三):RK3568虚拟机基础环境搭建之更新源、安装网络工具、串口调试、网络连接、文件传输、安装vscode和samba共享服务
|
机器学习/深度学习 索引 Python
python机器学习classification_report()函数 输出模型评估报告
python机器学习classification_report()函数 输出模型评估报告
2461 0
python机器学习classification_report()函数 输出模型评估报告
|
机器学习/深度学习 人工智能 分布式计算
Apache Flink 说道系列 - PyFlink集成Pandas(1+1 != 2)
# 开篇说道 说道聊什么,聊阿里人熟知的“因为相信,所以简单”!这是每个人内心所神往的日常工作生活!这看似 简单的言语,透彻的道理,虽被大众所认可,但人们对其执行的能力却大相径庭。“因为相信,所以简单” 不是对我们的约束,而是为我们寻求快乐指明了方向...永远做别人成功路上的基石...当TA人踏上人生巅峰,基石自具人生高度! ![image.png](https://ata2-img
3715 0
Apache Flink 说道系列 - PyFlink集成Pandas(1+1 != 2)
|
编解码 算法
白话H.265/HEVC和H.264/AVC编码结构
写在前面 在信息化时代,视频技术和应用的发展,特别是高清(HD)、超高清(UHD)、多视点(MultiView)视频、VR/AR技术的兴起,海量的视频信息已如潮涌般深入到我们工作和生活的方方面面。随着5G通信技术逐渐铺开落地,移动端设备的传输数据量会进一步增加。
3364 0
|
安全 Shell Linux
靶机实战-vuluhub系列-Hack djinn:1 : walkthrough
靶机实战-vuluhub系列-Hack djinn:1 : walkthrough
靶机实战-vuluhub系列-Hack djinn:1 : walkthrough
|
Linux 网络安全 数据安全/隐私保护
CentOS7下如何利用Firewalld防火墙实现IP+Port细粒度访问控制
CentOS7下如何利用Firewalld防火墙实现IP+Port细粒度访问控制
674 0
CentOS7下如何利用Firewalld防火墙实现IP+Port细粒度访问控制
|
算法 数据挖掘 API
AutoML | AutoSklearn的基本分类、回归、多输出回归和多标签分类数据集的使用示例
AutoML | AutoSklearn的基本分类、回归、多输出回归和多标签分类数据集的使用示例
450 0
AutoML | AutoSklearn的基本分类、回归、多输出回归和多标签分类数据集的使用示例
|
传感器 数据安全/隐私保护 异构计算
|
安全 API 数据库
系统权限设计 - 基本概念和思路
权限系统的设计几乎是每个系统都必需的模块,最近对系统的权限设计有一些心得体会。遇到过一些坑,也有一些思考,所以想写下来分享给大家。 本文的目的是帮助大家理清楚权限设计中的一些基本概念,提供常用的权限系统设计思路。
772 0
|
新零售 数据可视化 数据挖掘
解决方案应用实例 |“业务+数据”双中台,阿里云推进正佳广场精细化运营
正佳广场作为中国商业的典型,尝试各种创新的发展,借助阿里云打造以“业务+数据”双中台为核心的新运营模式。
2551 0
解决方案应用实例 |“业务+数据”双中台,阿里云推进正佳广场精细化运营