java - enum是什么? 为什么有它? 怎么用?
我想大声告诉你
我想大声告诉你 2017-05-17 10:01:51
0
7
696

实际现象

  • enum的基本会用, 但想追本溯源( 探讨下本质 )

预期现象

  1. 拒绝教条式的摘抄文档式的回答(时间重要)

  2. 求对enum深刻的认识(至少在实际生产环境中写过很多代码) !

注: 我不是编程初学者, 一些初级概念无需科普

上下文环境

  • 讨论的对象, 为Java中的enum( 其实enum是一种概念 )

  • 具体地, 是讨论enum 这个关键字

我想大声告诉你
我想大声告诉你

全部回复(7)
小葫芦
  1. 可以用来代替定义类型常量 ,比如 订单状态,证件类型等,保证类型安全
    比如用普通的String类表示订单状态,调用方可以传一个不在订单状态范围内的String给被调用方,这种错误在编译阶段不能发现

  2. java枚举类本质是一个多例模式实现,单例模式是多例模式的一个特例

  3. 枚举类不能继承,比如enumA extends enumB不行

  4. 一个枚举类 内部类型有顺序(order) 实现了 Comparable接口

左手右手慢动作

Effective Java 第6章有详细的解释,可以去看看

小葫芦

可以简单把enum看成一个有备注信息的int类型。

漂亮男人

被你的条件吓到了,我就说一点我个人的想法

enum可以看做一种特殊的class,包含一些访问性公开的常量,其实作为访问性公开的常量来说,在类加载过程中已经被解析到常量池,enum只是从语义的角度使用户可以更方便地在使用常量时展示常量的含义。同时也方便了常量的构造,循环遍历某一类型的所有常量,在switch语句中使用等等。

習慣沉默

这个题目太泛,不太好回答。
enum本质上是一个继承了java.lang.Enum的class,可以用在单例和需要限定输入的地方

洪涛

先说说自己个人的肤浅的主观的理解, 抛砖引玉.

我觉得 enum 出现的目的是:

  • 提供一种管理常量的手段,

  • 一种命名空间.

左手右手慢动作

enum的存在本身就是为了解决常量的可读性的问题,在没有enum之前,标记一种状态,常使用int类型,其1,2之类的可读性不是很好,而且新增一个常量要写一个长长语句,为了解决这一系列问题在jdk5就加上了这个功能。其本质就是一个类,只不过在创建enum的时候,会自动生成values()、ordinal()等方法,并且支持了switch语句,覆盖了常量会出现的场景,比直接定义常量要方便使用。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板