Java SE 5中的枚举类型

 Java SE 5之前,Java程序员在需要使用枚举类型时,必须了解很多细节并需要格外仔细,以正确地产生enum的效果。
现在Java也有了enum,并且它的功能比C/C++中的枚举类型要完备得多。
Java中定义一个枚举类型,如下:
//Rmb.java
/**
 * 表示人民币中的几种面值的enum类型
 * 
@author autumn
 
*/

public enum Rmb {
  
/**
   * 壹角
   
*/

  YIJIAO,

  
/**
   * 伍角
   
*/

  WUJIAO,

  
/**
   * 壹圆
   
*/

  YIYUAN,

  
/**
   * 伍圆
   
*/

  WUYUAN,

  
/**
   * 拾圆
   
*/

  SHIYUAN,

  
/**
   * 伍拾圆
   
*/

  WUSHIYUAN,

  
/**
   * 壹佰圆
   
*/

  YIBAIYUAN
}


这里创建了一个名为Rmb的枚举类型,它具有7个实例(值)。
枚举类型可以定义在一个单独的java源文件中(如上),也可以定义在其他java类内部。例如:
public class Card {
    
public enum Rank { DEUCE, THREE, FOUR, FIVE, SIX,
        SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE }


    public enum Suit 
{ CLUBS, DIAMONDS, HEARTS, SPADES }

    
private final Rank rank;
    
private final Suit suit;
    
private Card(Rank rank, Suit suit) {
        
this.rank = rank;
        
this.suit = suit;
    }


    
public Rank rank() return rank; }
    
public Suit suit() return suit; }
    
public String toString() return rank + " of " + suit; }
}

枚举类型的实例是常量(public static final),因此按命名惯例,它们都用大写字母表示。
现在,你可以使用这个Rmb的枚举类型了。例如:
Rmb aRMB = Rmb.YIBAIYUAN;
enum看起来像个新的数据类型,实际上enum就是一个类,它继承自Java SE 5的库中 java.lang.Enum<E>,并有自己的方法。我们使用enum关键字时,编译器会生成对应的类。
有关enum类的方法,大家可以自行查看API文档。
这里介绍一个特别实用的特性,即它可以在switch语句内使用:
//EnumTest.java

/**
 * enum测试
 * 
@author autumn
 
*/

public class EnumTest {

  
public static void main(String[] args) {
    Rmb aRmb 
= Rmb.WUYUAN;
    descRmb(aRmb);
  }


  
/**
   * 描述Rmb类型的方法
   * 
@param aRMB Rmb类型的值
   
*/

  
public static void descRmb(Rmb aRMB) {
    
switch (aRMB) {
      
case YIJIAO:
        System.out.println(
"这是一张壹角的人民币。");
        
break;
      
case WUJIAO:
        System.out.println(
"这是一张伍角的人民币。");
        
break;
      
case YIYUAN:
        System.out.println(
"这是一张壹圆的人民币。");
        
break;
      
case WUYUAN:
        System.out.println(
"这是一张伍圆的人民币。");
        
break;
      
case SHIYUAN:
        System.out.println(
"这是一张拾圆的人民币。");
        
break;
      
case WUSHIYUAN:
        System.out.println(
"这是一张伍拾圆的人民币。");
        
break;
      
case YIBAIYUAN:
        System.out.println(
"这是一张壹佰圆的人民币。");
        
break;
      
default:
        System.out.println(
"好像没有这个面值的人民币吧。。。");
    }

  }

}



switch是要在有限的可能值集合中进行选择,所以它与enum正是绝佳的组合。
在Java SE 5之前,你必须花费大量的精力去保证与其等价的枚举类型是安全可用的,而现在,我们可以使用enum关键字类来创建枚举类型,然后直接使用所得到的类型,而不用过多地考虑它们。
另外,我们使用enum的时候完全可以把它当成一个普通的类。
~我们可以在enum中添加新方法,甚至可以有main()方法。(如果要添加自己的方法,必须在enum实例序列的最后添加一个分号,而且,方法或属性只能定义在enum实例之后。)
~我们可以覆盖enum的方法。
~由于Java不支持多继承,编译器为我们创建的enum类已经继承了java.lang.Enum类,所以我们定义的enum不能再继承其他任何类。
~enum可以实现一个或多个接口。
~还有很多枚举类型的特性,它可以跟多态、泛型、反射等特性结合使用。
更多的java enum特性请google之 :)
http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html
http://java.sun.com/docs/books/tutorial/java/javaOO/enum.html
阅读更多
个人分类: Java SE
上一篇一块硬盘的爱情故事——完整版(转帖)
下一篇秋季饮食养生漫谈
想对作者说点什么? 我来说一句

JAVA枚举类型的用法详解

2010年09月12日 29KB 下载

Java SE 源码 Java SE 源码

2010年08月02日 17.27MB 下载

java中的枚举类型

2008年12月21日 169KB 下载

java SE 1.6.zip

2011年10月31日 25.23MB 下载

没有更多推荐了,返回首页

关闭
关闭