Java SE 5中的枚举类型

原创 2007年10月03日 22:53:00
 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 5th day:Object-oriented 04

(材料源于网络) Java SE 5th day:Object-oriented 04 1、本次课程知识点 1、final关键字及单例设计模式; 2、对象多态性的概念及应用; 3、抽象类和接口的基...

Java SE 5 新特性

JDK5.0新特性系列---1.自动装箱和拆箱   JDK5.0新特性系列---2.新的for循环 JDK5.0新特性系列---3.枚举类型 JDK5.0新特性系列---4.静态导入...

程序猿二三事之Java基础--Java SE 5增加的特性--语法篇(一)

程序猿二三事之Java基础–Java SE 5增加的特性–语法篇(一)[ TOC ]为什么是Java SE 5?目前已经到了JDK-8u74了,JDK7的主版本已经于2015年4月停止公开更新。那为什...

5-枚举类型、输入输出、处理

  • 2013年07月16日 15:58
  • 14KB
  • 下载

java枚举类型enum的使用

  • 2014年07月23日 13:57
  • 6KB
  • 下载

Java 5 新特性——枚举类型

枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。...
  • okjohn
  • okjohn
  • 2011年02月11日 16:01
  • 405

java枚举类型优秀源代码

  • 2017年08月17日 19:48
  • 17KB
  • 下载

Qt5::WindowFlags枚举类型

Qt::Widget: QWidget构造函数的默认值,如果新的窗口部件没有父窗口部件,则它是一个独立的窗口,否则就是一个子窗口部件。 Qt::Window: 无论是否有父窗口部件,新窗口部件都是一个...

Java枚举类型编程(enumeration)

  • 2012年03月28日 18:34
  • 616KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java SE 5中的枚举类型
举报原因:
原因补充:

(最多只允许输入30个字)