- 什么是枚举?
- 为什么要用枚举?
- 枚举可以怎么用?
- Pros VS Cons
1.什么是枚举
首先我们从一个枚举类的反编译文件来认识一下枚举类
Compiled from "ColorEnum.java" public final class com.james.learning.j2se.enums.ColorEnum extends java.lang.Enum<com.james.learning.j2se.enums.ColorEnum> { public static final com.james.learning.j2se.enums.ColorEnum RED; public static final com.james.learning.j2se.enums.ColorEnum YELLOW; public static com.james.learning.j2se.enums.ColorEnum[] values(); Code: 0: getstatic #1 // Field $VALUES:[Lcom/james/learning/j2se/enums/ColorEnum; 3: invokevirtual #2 // Method "[Lcom/james/learning/j2se/enums/ColorEnum;".clone:()Ljava/lang/Object; 6: checkcast #3 // class "[Lcom/james/learning/j2se/enums/ColorEnum;" 9: areturn public static com.james.learning.j2se.enums.ColorEnum valueOf(java.lang.String); Code: 0: ldc #4 // class com/james/learning/j2se/enums/ColorEnum 2: aload_0 3: invokestatic #5 // Method java/lang/Enum.valueOf:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum; 6: checkcast #4 // class com/james/learning/j2se/enums/ColorEnum 9: areturn static {}; Code: 0: new #4 // class com/james/learning/j2se/enums/ColorEnum 3: dup 4: ldc #7 // String RED 6: iconst_0 7: invokespecial #8 // Method "<init>":(Ljava/lang/String;I)V 10: putstatic #9 // Field RED:Lcom/james/learning/j2se/enums/ColorEnum; 13: new #4 // class com/james/learning/j2se/enums/ColorEnum 16: dup 17: ldc #10 // String YELLOW 19: iconst_1 20: invokespecial #8 // Method "<init>":(Ljava/lang/String;I)V 23: putstatic #11 // Field YELLOW:Lcom/james/learning/j2se/enums/ColorEnum; 26: iconst_2 27: anewarray #4 // class com/james/learning/j2se/enums/ColorEnum 30: dup 31: iconst_0 32: getstatic #9 // Field RED:Lcom/james/learning/j2se/enums/ColorEnum; 35: aastore 36: dup 37: iconst_1 38: getstatic #11 // Field YELLOW:Lcom/james/learning/j2se/enums/ColorEnum; 41: aastore 42: putstatic #1 // Field $VALUES:[Lcom/james/learning/j2se/enums/ColorEnum; 45: return }
从前面一句可以看出来
Compiled from "ColorEnum.java" public final class com.james.learning.j2se.enums.ColorEnum extends java.lang.Enum<com.james.learning.j2se.enums.ColorEnum> {
a. ColorEnum是final的,不能被再继承,也就是之后状态不能被覆盖。
b. ColorEnum继承自Enum.
public static final com.james.learning.j2se.enums.ColorEnum RED; public static final com.james.learning.j2se.enums.ColorEnum YELLOW; public static com.james.learning.j2se.enums.ColorEnum[] values();
这里我们看到成员变量RED、YELLOW 其实是一个 ColorEnum。自动会增加一个 values的方法返回ColorEnum[] 。
2. 为什么要用枚举
从effective java里摘出来的,像
public static final int TOTAL = 10; public static final String MSG = "message";
这样的有以下几方面的问题:
1. 编译期无法感知是否用错,像入参的话可以直接用数字代替,数字还能做加减,这样不是常量的本意。
2. 如果是RPC,服务端的api里包含的常量,当服务端常量改变的时候,客户端需要跟着编译一次,当然也 可以不编译,但是做参数传递的话就会两端不一致。
相关推荐
枚举Enum的一些案例 枚举(enum)是一种特殊的值类型,它从 System.Enum 继承而来,并为基础的基元类型的值提供替代名称。枚举类型有名称、基础类型和一组字段。基础类型必须是一个内置的有符号(或无符号)整数...
枚举(Enum)作为编程语言中一种特殊的类型,为开发者提供了一种简洁、清晰的定义一组命名常量的方式。在C#语言中,枚举是通过`enum`关键字定义的,其本质上是一种结构体,与整型(int)紧密相关联,但提供了更丰富...
"Java Enum 枚举学习资料" Java Enum 枚举学习资料是 Java 编程语言中的一种特殊类型,它主要用来实现一组固定的常量。 Enum 枚举类型是 Java 5 中引入的一种新特性,旨在解决传统的 int 枚举常量的缺陷。 1. 枚举...
Java枚举类型(Enum)是Java SE 5.0引入的一种新的数据类型,它为开发者提供了更为强大且安全的方式来表示一组常量。枚举在Java中不仅是一个类,还是一种特殊的类型,允许我们定义自己的常量集合。接下来,我们将...
利用自定的枚举类型,结合rand函数,结合C++编程进行博彩游戏的模拟(掷双骰子)
首先,定义枚举要导入enum模块。 枚举定义用class关键字,继承Enum类。 注意: 定义枚举时,成员名称不允许重复 默认情况下,不同的成员值允许相同。但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名...
Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类...
枚举(enum)在编程语言中是一种非常有用的类型,它允许我们定义一组命名常量,这些常量通常代表一组相关的值。在C#中,枚举(enum)被广泛用于增强代码的可读性和可维护性。下面我们将深入探讨C#中的枚举用法。 一...
C#与C调用C++,非托管,含struct调用及enum公用,完整项目,可直接编译或运行。 项目将所有工程的输出统一到Debug。 vs2015+Framework4.6,注意工程的配置。 所有东西自写,只是出于样例参考的作用,所以代码规范...
c#遍历枚举(ENUM)类型的方法,简单实用,适合c#初学者
在C语言中,枚举(enum)是一种定义符号常量的数据类型,它允许我们为整数值赋予有意义的名称。这不仅提高了代码的可读性,还可以避免硬编码数字,从而减少错误的可能性。本文将深入探讨C语言中的枚举类型及其用法。...
Java中的枚举类型`Enum`是面向对象编程中一种强大的工具,它允许程序员定义自己的常量集合。在Java中,枚举类型不是简单的常量数组,而是一种完整的类,具有类的所有特性,如方法、构造函数和继承。下面将详细探讨`...
### C++中的枚举类型(Enum) 在C++编程语言中,枚举(`enum`)是一种用户定义的类型,它由一组具有整数值的命名常量组成。这些值可以被程序用来代替数字,使代码更具可读性,并且能够表示特定范围内的固定集合。 ...
enum枚举的方法
枚举(Enum)在编程语言中是一种非常重要的数据类型,它允许我们定义一组预定义的常量,这些常量通常代表特定的值或状态。枚举在很多编程场景下都有广泛的应用,例如在处理有限状态机、定义颜色、星期等具有固定数量...