- 什么是枚举?
- 为什么要用枚举?
- 枚举可以怎么用?
- 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和switch 的使用代码
枚举的一些案例通过举例一些实例来讲解枚举,附有代码
利用自定的枚举类型,结合rand函数,结合C++编程进行博彩游戏的模拟(掷双骰子)
java enum详细教程。由浅入深,包括基本语法方面..很适合新手学习。/n各位看官。绝对超值。
下面小编就为大家带来一篇浅谈Python 的枚举 Enum。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要给大家介绍了关于Java的枚举enum的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
NULL 博文链接:https://rensanning.iteye.com/blog/2013734
c代码-C:枚举 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枚举类...
C#与C调用C++,非托管,含struct调用及enum公用,完整项目,可直接编译或运行。 项目将所有工程的输出统一到Debug。 vs2015+Framework4.6,注意工程的配置。 所有东西自写,只是出于样例参考的作用,所以代码规范...
c#遍历枚举(ENUM)类型的方法,简单实用,适合c#初学者
enum.docx ,详细介绍了enum的用法,枚举用法在c#中比较常见,希望会有帮助哦
enum枚举的方法
Java中的枚举类型Enum示例源代码,详见http://blog.csdn.net/snarlfuture/article/details/18996037
C++中枚举类型(enum)
java 枚举(enum) 详解(学习资料); java 枚举(enum) 详解(学习资料); java 枚举(enum) 详解(学习资料); java 枚举(enum) 详解(学习资料);