java - enum是什么? 为什么有它? 怎么用?
问题描述
实际现象enum的基本会用, 但想追本溯源( 探讨下本质 )
预期现象拒绝教条式的摘抄文档式的回答(时间重要)
求对enum深刻的认识(至少在实际生产环境中写过很多代码) !
注: 我不是编程初学者, 一些初级概念无需科普
上下文环境讨论的对象, 为Java中的enum( 其实enum是一种概念 )
具体地, 是讨论enum 这个关键字
问题解答
回答1:可以用来代替定义类型常量 ,比如 订单状态,证件类型等,保证类型安全 比如用普通的String类表示订单状态,调用方可以传一个不在订单状态范围内的String给被调用方,这种错误在编译阶段不能发现
java枚举类本质是一个多例模式实现,单例模式是多例模式的一个特例
枚举类不能继承,比如enumA extends enumB不行
一个枚举类 内部类型有顺序(order) 实现了 Comparable接口
回答2:Effective Java 第6章有详细的解释,可以去看看
回答3:可以简单把enum看成一个有备注信息的int类型。
回答4:被你的条件吓到了,我就说一点我个人的想法
enum可以看做一种特殊的class,包含一些访问性公开的常量,其实作为访问性公开的常量来说,在类加载过程中已经被解析到常量池,enum只是从语义的角度使用户可以更方便地在使用常量时展示常量的含义。同时也方便了常量的构造,循环遍历某一类型的所有常量,在switch语句中使用等等。
回答5:这个题目太泛,不太好回答。enum本质上是一个继承了java.lang.Enum的class,可以用在单例和需要限定输入的地方
回答6:先说说自己个人的肤浅的主观的理解, 抛砖引玉.
我觉得 enum 出现的目的是:
提供一种管理常量的手段,
一种命名空间.
回答7:enum的存在本身就是为了解决常量的可读性的问题,在没有enum之前,标记一种状态,常使用int类型,其1,2之类的可读性不是很好,而且新增一个常量要写一个长长语句,为了解决这一系列问题在jdk5就加上了这个功能。其本质就是一个类,只不过在创建enum的时候,会自动生成values()、ordinal()等方法,并且支持了switch语句,覆盖了常量会出现的场景,比直接定义常量要方便使用。
相关文章:
1. linux - 【已解决】fabric部署的Python项目Apache启动之后提示403Forbidden该如何解决?2. python - (初学者)代码运行不起来,求指导,谢谢!3. mysql里的大表用mycat做水平拆分,是不是要先手动分好,再配置mycat4. window下mysql中文乱码怎么解决??5. python - flask sqlalchemy signals 无法触发6. nginx - pip install python库报错7. python - 获取到的数据生成新的mysql表8. python的文件读写问题?9. javascript - js 对中文进行MD5加密和python结果不一样。10. 为什么python中实例检查推荐使用isinstance而不是type?
