`

java中的枚举

阅读更多

在java性能调优中经常要把字符串匹配转换为枚举型匹配。

 

介绍:

java.lang.Enum是JDK5.0版本新加入的类,我们所编写的枚举其实都是隐式的继承自它,既然它是类,因此会有类型安全性、编译期检查以及可将它用在变量声明中的能力。这可以把使用数值或字符串来模拟含义的常量彻底打败,枚举中的各个实例(值)都是被隐式声明为public static final的,而且你也不能将这些声明手动赋予给实例(值),编译器会自己处理。所以比较Enum实际是比较int型,比String快。

 

特点:

 

◆类型安全(Type Safety)
◆紧凑有效的枚举数值定义(Compact, Efficient Declaration of Enumerated Values)
◆无缝的和程序其它部分的交互操作(Seamless integration with other language features)
◆运行的高效率(Runtime efficiency)

 

适用场景:

程序中有字典组件,这些字典组件可以定义Enum型,运行比String快(起初用String是因为他能表达语言含义,容易阅    读程序,而Enum型坚固快和见其名知其意)。

 

应用实例:

 

简单使用:

 

/**
 * 颜色的枚举
 * @author David Day
 */
public enum ColorEnum {
	
	/**
	 * 红色
	 */
	RED,
	/**
	 * 绿色
	 */
	GREEN,
	/**
	 * 蓝色
	 */
	BLUE;

	public static void main(String[] args) {
		// 获得枚举实例序号
		int index = RED.ordinal();RED.compareTo(RED);
		// 返回所有的枚举实例
		ColorEnum[] colors = ColorEnum.values();
		// 获得实例的名称
		String colorName = GREEN.name();
		// 通过实例名称来获得枚举实例
		ColorEnum color = ColorEnum.valueOf(colorName);
		/* 比较两个枚举的方法一
		 * 比较方式是比较枚举的ordinal
		 */
		int compare = BLUE.compareTo(BLUE);
		/* 比较两个枚举的方法二
		 * 枚举支持直接用这种逻辑表达式方式作比较
		 */
		boolean isEqual = RED == GREEN;
		// 枚举支持直接用switch作选择
		switch (BLUE) {
			case RED: break;
			case GREEN: break;
			case BLUE: break;
			default: break;
		}
	}

}

 

复杂高级使用:

 

import java.awt.Color;
import java.io.Serializable;

/**
 * 颜色的枚举
 * 是能实现接口
 * 不能继承
 * @author David Day
 */
public enum ColorEnum implements Serializable {
	
	/**
	 * 红色
	 */
	RED(255, 0, 0) {
		
		@Override
		public void doSomeThing() {
			System.out.println(name());
		}
		
	},
	/**
	 * 绿色
	 */
	GREEN(0, 255, 0) {
		
		@Override
		public void doSomeThing() {
			System.out.println(ordinal());
		}
		
	},
	/**
	 * 蓝色
	 */
	BLUE(0, 0, 255) {
		
		@Override
		public void doSomeThing() {
			System.out.println(toString());
		}
		
	};
	
	/**
	 * 颜色
	 */
	private Color color;

	/**
	 * 实例化颜色枚举
	 * 枚举字段的实例化将会调用这个构造方法
	 * 必须用private修饰
	 * 代表只有本枚举自己能够构造
	 * 枚举的实例都是静态的
	 * 会在第一次访问的时候就生成
	 * @param r 红色
	 * @param g 绿色
	 * @param b 蓝色
	 */
	private ColorEnum(int r, int g, int b) {
		this.color = new Color(r, g, b);;
	}

	/**
	 * @return 颜色实体
	 */
	public Color getColor() {
		return color;
	}
	
	/**
	 * 定义抽象方法
	 * 实例必须实现它
	 */
	abstract void doSomeThing();
	
	public static void main(String[] args) {
		Color color = RED.getColor();
		GREEN.doSomeThing();
	}

}
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics