枚举类型模拟
来源:互联网 发布:淘宝虚拟物品货源 编辑:程序博客网 时间:2024/06/01 20:43
JAVA中的枚举类型总是会让初学者有些害怕。由于C语言的惯性思维,导致很多人总是不能很好的理解JAVA中的枚举类型的原理。本文就从模拟枚举类型的实现的角度来学习枚举类型。
JAVA中的枚举:
1.枚举类型是一种取值被严格限定在一个有限的集合中的变量类型。
2.java中的枚举是一种特殊的类。每一个枚举都会被编译成一个class文件。
3.枚举主要用于限定变量的取值,从而从根源上有效的避免了非法的赋值。
4.声明一个枚举的方式为 public enum Sex{ MALE,FEMALE } ,在使用时即可使用Sex.MALE和Sex.FEMALE。
下面我们来模拟Enum:
public class Weekday { //构造方法必须私有 //保证其他任何类都不能创建Weekday的实例 private Weekday(){} //在静态初始化的时候创建对象 //引用必须是共有的静态的 public static Weekday SUN = new Weekday(); public static Weekday MON = new Weekday(); public static Weekday TUE = new Weekday(); public static Weekday WED = new Weekday(); public static Weekday THU = new Weekday(); public static Weekday FRI = new Weekday(); public static Weekday SAT = new Weekday();}
然后我们就可以使用它了,使用起来和Enum没有什么区别。
Weekday weekday = Weekday.SUN;
而且weekday 的值只能从集合{SUN,MON,TUE,WED,THU,FRI,SAT}中取,而不能被我们随便定义。
实际上,enum就是用类似的方法实现的。
如何使用有参数的枚举类型:
有时候,我们需要将枚举类型的值与int类型的值相对应,这时候,我们就需要给每个枚举对象一个int类型的value。这是可以通过重写enum类型的构造方法来实现。如:
public enum Weekday { SUN(0); MON(1); TUE(2); private int value; private Weekday(int value){ this.value=value; } public int getValue(){ return value; } public static WeekDay getDay(int value){ switch(value){ case 0:return WeekDay.SUN; case 1:return WeekDay.MON; case 2:return WeekDay.TUE; default:return null; }}
对照上面的代码,是不是这个有参数的枚举类型也很容易理解?
其实java类的枚举类型实现也是通过类似的语法糖实现的而已,所有的enum类编译之后都是一个继承java.lang.Enum的类而已。不信我们可以在上面的这个类中添加个方法试下:
public static void main(String[] args) { System.out.println(SUN instanceof Enum); }
输出结果肯定为true.
0 0
- PHP模拟枚举类型
- 如何模拟枚举类型
- 枚举类型模拟
- 用普通类模拟枚举类型
- C常见问题之用枚举类型模拟bool类型
- jdk1.5新特性5之枚举之模拟枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- 枚举类型
- YTU 2432: C++习题 对象数组输入与输出
- POJ 3565 Ants(二分图最小权完备匹配)
- poj 1324(BFS+状态压缩)
- Android Studio如何删除module
- 【LeetCode OJ 14】Longest Common Prefix
- 枚举类型模拟
- 学习redis基础命令网站
- Swift中定义protocol,定义optional方法
- Swift开发 底部对话框UIActionSheet
- Explicit关键字
- 猫都能学会的Unity3D Shader入门指南(一)
- POJ 1426 字符串来处理大数求解该题
- Tomcat服务器安装
- android activity启动的四种模式