广告载入中
  所在位置:网站首页 -> 网络学院 -> JAVA -> J2SE -> Java SE 5中的枚举类型的使用方法
我要发言 发起投票 发起交易 任务悬赏 回复话题              

Java SE 5中的枚举类型的使用方法

时间:2007-12-5 7:06:29 作者: 安蕾 短消息 收藏 编辑 删除
广告载入中
广告载入中
广告载入中
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之 :)

广告载入中

看看评论

快速回复

  • 支持UBB,HTML标签


  • 高级回复
  • 广告载入中
      
    操作选项: 加精 解精 奖惩 设专题 设公告 解公告 固顶 总固顶 解固顶 结帖 解结帖 锁帖 解锁 移帖 删帖   
    看看456-学习娱乐在线门户.致力为一切由互联网接入本站的朋友们,倾情打造一片学习娱乐新时空!
    Copyright ? 2007-2009 www.kankan456.com online services. All rights reserved. 浙ICP备07003587号
    欢迎您在看看发布各类原创作品和讨论话题,您的支持是“看看456”前进的基石