<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    幻境
    We are extremely fortunate not to know precisely the kind of world we live in
    posts - 22,comments - 39,trackbacks - 0

    枚舉

    在過去,我們必須用整型常數(shù)代替枚舉,隨著J2SE 5.0的發(fā)布,這樣的方法終于一去不復(fù)返了。

    一個簡單的枚舉類型定義如下:

    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;

    }

     

    枚舉類型可以有自己的構(gòu)造方法,不過必須是私有的,也可以有其他方法的定義,如下面的代碼:

    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");

     

    如果我們有一個枚舉類型,表示四則運(yùn)算,我們希望在其中定義一個方法,針對不同的值做不同的運(yùn)算,那么我們可以這樣定義:

    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);

            }

    }

     

    這樣寫的問題是你如果沒有最后一行拋出異常的語句,編譯就無法通過。而且如果我們想要添加一個新的運(yùn)算,就必須時刻記著要在eval中添加對應(yīng)的操作,萬一忘記的話就會拋出異常。

    J2SE 5.0提供了解決這個問題的辦法,就是你可以把eval函數(shù)聲明為abstract,然后為每個值寫不同的實現(xiàn),如下所示:

     

    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開發(fā) IDE的改進(jìn),代碼量的問題應(yīng)該會被淡化。

    posted on 2005-05-12 10:57 閱讀(1198) 評論(0)  編輯  收藏 所屬分類: 編程相關(guān)
    主站蜘蛛池模板: 亚洲AV成人潮喷综合网| www免费黄色网| 久久亚洲伊人中字综合精品| 午夜时刻免费入口| 最新黄色免费网站| a毛片免费播放全部完整| 国产精品亚洲综合天堂夜夜| 亚洲精品一卡2卡3卡三卡四卡| 国产成人亚洲影院在线观看| 国产真人无遮挡作爱免费视频 | 男女超爽刺激视频免费播放| 日韩精品无码免费专区网站| 成人久久久观看免费毛片| 亚洲一区二区观看播放| 亚洲欧洲综合在线| 亚洲AV色香蕉一区二区| 亚洲区小说区图片区QVOD| 亚洲一级黄色视频| 免费国产在线观看老王影院| 日韩毛片免费无码无毒视频观看| 午夜爽爽爽男女免费观看影院| a级大片免费观看| 成人免费777777被爆出| 国产高潮流白浆喷水免费A片 | 曰批免费视频播放免费| 亚洲国产欧美一区二区三区| 亚洲高清毛片一区二区| 亚洲精品无码永久在线观看男男| 亚洲va精品中文字幕| 亚洲国产成人久久99精品| 亚洲噜噜噜噜噜影院在线播放| 亚洲综合无码一区二区三区| 亚洲美女大bbbbbbbbb| 亚洲小说图片视频| ww亚洲ww在线观看国产| 亚洲卡一卡二卡乱码新区| 香蕉大伊亚洲人在线观看| 亚洲成在人线在线播放无码| 精品久久久久亚洲| 男人j进女人p免费视频| 一级做a爰黑人又硬又粗免费看51社区国产精品视 |