Ich weiß grundsätzlich, wie man Enum verwendet, aber ich möchte zur Quelle zurückkehren (das Wesentliche besprechen)
Lehnen Sie dogmatische Antworten aus Dokumenten ab (Zeit ist wichtig)
Suche nach einem tiefen Verständnis von Enum (zumindest habe ich viel Code in der tatsächlichen Produktionsumgebung geschrieben)!
Hinweis: Ich bin kein Programmieranfänger, einige Grundkonzepte erfordern keine Populärwissenschaft
Der Gegenstand der Diskussion ist Enum in Java (eigentlich ist Enum ein Konzept)
Konkret besprechen wir das Schlüsselwort enum
可以用来代替定义类型常量 ,比如 订单状态,证件类型等,保证类型安全
比如用普通的String类表示订单状态,调用方可以传一个不在订单状态范围内的String给被调用方,这种错误在编译阶段不能发现
java枚举类本质是一个多例模式实现,单例模式是多例模式的一个特例
枚举类不能继承,比如enumA extends enumB不行
一个枚举类 内部类型有顺序(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语句,覆盖了常量会出现的场景,比直接定义常量要方便使用。