Java Enum类浅谈

习惯了C++,突然使用Java这门语言真是有点神奇,虽然都是一个族系的语言,但是不同支出还是很多。

看了别人的代码,居然看enum就晕晕的,于是简单花了点时间研究了一下。

Java中enum其实是一个类,其继承了Enum,并且无法使用extends关键字(Java 只支持单继承)。

既然是一个类,那么Enum就可以定义自己的构造函数、成员变量以及方法函数。

以下示例代码来源于:http://blog.csdn.net/wgw335363240/article/details/6359614

package com.xiaomi.browser.hadoop.tasks;
import java.util.EnumMap;
import java.util.EnumSet;

/**
 * Created by chuang on 14-12-22.
 */
public class EnumTest {

		// 1. 定义枚举类型
		public enum Light {
			// 利用构造函数传参
			RED (1), GREEN (3), YELLOW (2);

			// 定义私有变量
			private int nCode ;

			// 构造函数,枚举类型只能为私有
			private Light( int _nCode) {
				this . nCode = _nCode;
			}

			@Override
			public String toString() {
				return String.valueOf ( this . nCode );
			}
		}

		/**
		 * @param args
		 */
		public static void main(String[] args ) {

			// 1. 遍历枚举类型
			System. out .println( " 演示枚举类型的遍历 ......" );
			testTraversalEnum ();

			// 2. 演示 EnumMap 对象的使用
			System. out .println( " 演示 EnmuMap 对象的使用和遍历 ....." );
			testEnumMap ();

			// 3. 演示 EnmuSet 的使用
			System. out .println( " 演示 EnmuSet 对象的使用和遍历 ....." );
			testEnumSet ();
		}

		/**
		 * 演示枚举类型的遍历
		 */
		private static void testTraversalEnum() {
			Light[] allLight = Light.values ();
			for (Light aLight : allLight) {
				System. out .println( " 当前灯 name : " + aLight.name());
				System. out .println( " 当前灯 ordinal : " + aLight.ordinal());
				System. out .println( " 当前灯: " + aLight);
			}
		}

		/**
		 * 演示 EnumMap 的使用, EnumMap 跟 HashMap 的使用差不多,只不过 key 要是枚举类型
		 */
		private static void testEnumMap() {
			// 1. 演示定义 EnumMap 对象, EnumMap 对象的构造函数需要参数传入 , 默认是 key 的类的类型
			EnumMap<Light, String> currEnumMap = new EnumMap<Light, String>(
					Light. class );
			currEnumMap.put(Light. RED , " 红灯 " );
			currEnumMap.put(Light. GREEN , " 绿灯 " );
			currEnumMap.put(Light. YELLOW , " 黄灯 " );

			// 2. 遍历对象
			for (Light aLight : Light.values ()) {
				System. out .println( "[key=" + aLight.name() + ",value="
						+ currEnumMap.get(aLight) + "]" );
			}
		}

		/**
		 * 演示 EnumSet 如何使用, EnumSet 是一个抽象类,获取一个类型的枚举类型内容 <BR/>
		 * 可以使用 allOf 方法
		 */
		private static void testEnumSet() {
			EnumSet<Light> currEnumSet = EnumSet.allOf (Light. class );
			for (Light aLightSetElement : currEnumSet) {
				System. out .println( " 当前 EnumSet 中数据为: " + aLightSetElement);
			}

		}
}
其输出为

演示枚举类型的遍历 ......
 当前灯 name : RED
 当前灯 ordinal : 0
 当前灯: 1
 当前灯 name : GREEN
 当前灯 ordinal : 1
 当前灯: 3
 当前灯 name : YELLOW
 当前灯 ordinal : 2
 当前灯: 2
 演示 EnmuMap 对象的使用和遍历 .....
[key=RED,value= 红灯 ]
[key=GREEN,value= 绿灯 ]
[key=YELLOW,value= 黄灯 ]
 演示 EnmuSet 对象的使用和遍历 .....
 当前 EnumSet 中数据为: 1
 当前 EnumSet 中数据为: 3
 当前 EnumSet 中数据为: 2

Process finished with exit code 0

可以看出,Java Enum类型的语法结构尽管和java类的语法不一样,应该说差别比较大。但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum<E>。

上面简单说明了一些Enum类的遍历,同时toString的重载也很有用。
一些细节的方法演示这里不多说,与普通类对象定义相同,只需要直接调用就行,比如以上代码,我们可以使用Light.RED.toString();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值