java Enum类深入研究

0. 原始接口定义常量

原始的接口定义常量

public  interface  IConstants {
     String MON = "Mon" ;
     String TUE = "Tue" ;
     String WED = "Wed" ;
     String THU = "Thu" ;
     String FRI = "Fri" ;
     String SAT = "Sat" ;
     String SUN = "Sun" ;
}
 


1. 测试

public enum ExchangeType {
	

	DIRECT,FANOUT
}



测试代码如下:


public class TestEnum {
	public static void main(String[] args) {
		
		System.out.println(ExchangeType.DIRECT);
<pre name="code" class="java">                System.out.println(ExchangeType.FANOUT);

 
 

输出结果如下:

DIRECTFANOUT

问题是,我们无法控制enmu类型表示的值,如果改动,所有引用都会出现问题。所以考虑可以赋值变量,类似于public  static  final string  方式使用变量。

2.  如何赋值

1. 构造方式
2. override toString 方法 
如下所示:
public enum ExchangeType {
	
	DIRECT("directnew"),FANOUT("fanout"),TOPIC("topic");
	
	private  String  type;
	
	private ExchangeType(String  type){
		
		this.type=type;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return type;
	}
	

测试代码如下:
package com.java.enumtest;

public class TestEnum {
	public static void main(String[] args) {
		
		System.out.println(ExchangeType.DIRECT);
		System.out.println(ExchangeType.values()[0]);
		
		ExchangeType[] type=ExchangeType.values();
		for (ExchangeType exchangeType : type) {
			System.out.println(exchangeType);
		}
		
	}

}

 创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum<E extends Enum<E>>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

package  com.hmw.test;
/**
  * 枚举测试类
  * @author <a href="mailto:[email protected]">何明旺</a>
  */
public  enum  EnumTest {
     MON, TUE, WED, THU, FRI, SAT, SUN;
}

这段代码实际上调用了7次 Enum(String name, int ordinal):

new  Enum<EnumTest>( "MON" , 0 );
new  Enum<EnumTest>( "TUE" , 1 );
new  Enum<EnumTest>( "WED" , 2 );



 不错的分析文章:http://www.cnblogs.com/hemingwang0902/archive/2011/12/29/2306263.html


你可能感兴趣的:(java Enum类深入研究)