快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

J2SE 5.0实例---枚举

枚举
在过去,我们必须用整型常数代替枚举,随着J2SE 5.0的发布,这样的方式终于一去不复返了。

一个简朴的枚举类型定义如下:

public enum Weather

{

     SUNNY,RAINY,CLOUDY

}

枚举可以用在switch语句中:

Weather weather=Weather.CLOUDY;

     switch(weather)

     {

     case SUNNY:

            System.out.println("It\\\'s sunny");

            break;

     case CLOUDY:

            System.out.println("It\\\'s cloudy");

            break;

     case RAINY:

            System.out.println("It\\\'s rainy");

            break;

     }

枚举类型可以有自己的构造方式,不过必须是私有的,也可以有其他方式的定义,如下面的代码:

public enum Weather {

  SUNNY("It is sunny"),

  RAINY("It is rainy"),

  CLOUDY("It is cloudy");


 


  private String description;


 


  private Weather(String description) {

     this.description=description;

  }

 

  public String description() {

     return this.description;

  }

}

下面一段代码是对这个枚举的一个使用:

for(Weather w:Weather.values())

{

    System.out.printf(                                                  "Description of %s is /"%s/"./n",w,w.description());

}


 


Weather weather=Weather.SUNNY;

System.out.println(weather.description() + " today");

假如我们有一个枚举类型,表示四则运算,我们希望在其中定义一个方式,针对不同的值做不同的运算,那么我们可以这样定义:

public enum Operation {

   PLUS, MINUS, TIMES, DIVIDE;


 


      // Do arithmetic op represented by this constant

      double eval(double x, double y){

          switch(this) {

              case PLUS:   return x + y;

              case MINUS:  return x - y;

              case TIMES:  return x * y;

              case DIVIDE: return x / y;

          }

          throw new AssertionError("Unknown op: " + this);

      }

}

这样写的问题是你假如没有最后一行抛出非常的语句,编译就无法通过。而且假如我们想要添加一个新的运算,就必须时刻记着要在eval中添加对应的操作,万一忘记的话就会抛出非常。

J2SE 5.0提供了解决这个问题的办法,就是你可以把eval函数声明为abstract,然后为每个值写不同的实现,如下所示:

public enum Operation {

   PLUS   { double eval(double x, double y) { return x + y; } },

   MINUS  { double eval(double x, double y) { return x - y; } },

   TIMES  { double eval(double x, double y) { return x * y; } },

   DIVIDE { double eval(double x, double y) { return x / y; } };


 


   abstract double eval(double x, double y);

}



这样就避免了上面所说的两个问题,不过代码量增加了一些,但是随着今后各种Java开发 IDE的改进,代码量的问题应该会被淡化。




返回类别: 教程
上一教程: 纯 jsp 操作服务器上的文本文件 [2]
下一教程: java.net 操练

您可以阅读与"J2SE 5.0实例---枚举"相关的教程:
· J2SE5.0 实例---变长参数
· J2SE5.0实例---注释(annotation)
· J2SE 5.0实例---原生类型的autoboxing和auto-unboxing
· J2SE 5.0实例---静态引入
· J2SE5.0 实例---泛型
    微笑服务 优质保证 索取样品