关于枚举

简介:

一个简单的例子:

 

枚举定义类:

 

 

 

测试类:

 

 

 

关键词:实例,常量

 

枚举也是一个类。从测试类的第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,如需转载请自行联系原作者




相关文章
|
8月前
|
机器学习/深度学习 人工智能 测试技术
昆仑万维开源 Skywork R1V:开源多模态推理核弹!视觉链式分析超越人类专家
Skywork R1V 是昆仑万维开源的多模态思维链推理模型,具备强大的视觉链式推理能力,能够在多个权威基准测试中取得领先成绩,推动多模态推理模型的发展。
222 4
昆仑万维开源 Skywork R1V:开源多模态推理核弹!视觉链式分析超越人类专家
|
9月前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
334 3
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
|
8月前
|
人工智能 安全 前端开发
github和npm开启2FA双重身份验证无法登陆
随着安全需求提升,许多应用如GitHub和npm已强制启用2FA(双重身份验证)。2FA通过用户名、密码及动态验证码增强账号安全性。若手机丢失或TOTP应用失效,可使用开启2FA时生成的recovery code登录并重新绑定。推荐使用大厂的TOTP工具,如Microsoft Authenticator、Google Authenticator等,避免小应用停服风险。若无备份码,只能通过人工申诉找回账号。
420 15
github和npm开启2FA双重身份验证无法登陆
|
9月前
|
存储 人工智能 数据中心
Q3财报:阿里云收入增长13%至317.42亿元
Q3财报:阿里云收入增长13%至317.42亿元
392 13
|
运维 监控 安全
实施CAPWAP的基本准则
【8月更文挑战第23天】
247 0
|
11月前
|
人工智能 自然语言处理 搜索推荐
哪些CRM系统在2024年赢得了国内市场?
2024年,国内CRM市场呈现智能化、体系化、平台化趋势。纷享销客、销售易、神州云动等领先供应商通过产品创新、新签约客户及市场扩展,展示了强劲的发展势头。纷享销客推出AI大模型与CRM结合的纷享AI,签约中国移动国际、五芳斋等多家知名企业;销售易推出NeoAI平台,获“2024中国智能应用产品选型推荐”荣誉;神州云动CloudCC推出信创版CRM,签约中联教育、国药控股等客户。三家企业在2024年的表现,为国内CRM市场注入了新的活力。
|
安全 物联网 网络安全
智能设备的安全隐患:物联网(IoT)安全指南
智能设备的安全隐患:物联网(IoT)安全指南
1057 12
|
12月前
|
存储 监控 数据挖掘
计算机网络的功能
计算机网络支持信息交换、资源共享、分布式处理、可靠性增强及集中管理。信息交换涵盖多种媒体形式,促进远程协作;资源共享降低用户成本,提高效率;分布式处理提升计算能力;冗余机制保障系统稳定;集中管理简化网络维护,确保安全运行。
407 2
|
12月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第36天】探索卷积神经网络(CNN)的神秘面纱,揭示其在图像识别领域的威力。本文将带你了解CNN的核心概念,并通过实际代码示例,展示如何构建和训练一个简单的CNN模型。无论你是深度学习的初学者还是希望深化理解,这篇文章都将为你提供有价值的见解。
|
人工智能 JavaScript Java
java表格识别PaddleOcr总结
本文介绍了使用OpenCV和PaddleOCR进行表格识别的方法。通过OpenCV进行图像处理,并利用PaddleOCR进行文字识别。文中详细描述了在Windows和Linux环境下搭建PaddleOCR环境的过程,包括解决CMake依赖问题、生成DLL文件等。此外,还提供了C++代码示例说明如何导出识别结果,并探讨了Java环境下使用JNA进行复杂对象传递遇到的问题及解决方案。作者分享了在表格识别项目中的实践经验,包括处理模型转换和优化等方面的挑战。
453 5
java表格识别PaddleOcr总结