JavaExplore

          一切像霧像雨又像風(fēng)
          posts - 19, comments - 45, trackbacks - 0, articles - 0

          代碼中經(jīng)常會(huì)出現(xiàn)枚舉性的變量,比如血型、性別之類(lèi)。
          以血型為例:

          class?Blood {
          public?final?static?
          int ?o = 0 ;
          public?final?static?
          int ?A = 1 ;
          public?final?static?
          int ?B = 2 ;
          public?final?static?
          int ?AB = 3 ;

          private?Blood();
          }



          class?person
          {
          private?
          int ?_blood;
          public?
          void ?setBlood( int ?b) {
          ???_blood
          = b;
          }

          如果要給一個(gè)person的實(shí)例設(shè)置血型,代碼如此:person.setBlood(Blood.A);
          這個(gè)寫(xiě)法的代碼中,setBlood的參數(shù)為整型,如果如此調(diào)用person.setBlood(9);
          編譯器無(wú)法發(fā)現(xiàn)錯(cuò)誤,只能靠人為控制,如果在方法setBlood中檢測(cè)參數(shù)的有效性,又超越了該方法的職責(zé)。

          重構(gòu)后的代碼如下:

          final class?Blood{
          public?final?static?Blood?O
          =new?Blood(0);
          public?final?static?Blood?A
          =new?Blood(1);
          public?final?static?Blood?B
          =new?Blood(2);
          public?final?static?Blood?AB
          =new?Blood(3);
          private?
          int?_bloodCode;
          private?Blood(
          int?b){
          ????_bloodCode
          =b;
          ??}

          public?
          int?getCode(){
          ????
          return?_bloodCode;
          ??}

          }


          class?person
          {
          private?Blood?_blood;
          public?setBlood(Blood?b)
          {
          ????_blood
          =b;
          ??}

          }

          如此,(1)隱藏了血型的編碼細(xì)節(jié)
          ????????????(2)方便編譯期間發(fā)現(xiàn)錯(cuò)誤
          ??????????? (3)避免使用超越數(shù)據(jù)范圍的參數(shù)

          Feedback

          # re: 神奇的重構(gòu)技術(shù)(《重構(gòu)》讀書(shū)筆記 一)  回復(fù)  更多評(píng)論   

          2005-09-19 09:26 by fanta
          規(guī)范的編程是不允許出現(xiàn)person.setBlood(9);這樣的代碼的,不能直接將數(shù)字常量直接放在代碼里的

          # re: 神奇的重構(gòu)技術(shù)(《重構(gòu)》讀書(shū)筆記 一)  回復(fù)  更多評(píng)論   

          2005-09-19 09:31 by JavaExplore
          那就public final static int H=9;
          person.setBlood(H);

          # re: 神奇的重構(gòu)技術(shù)(《重構(gòu)》讀書(shū)筆記 一)  回復(fù)  更多評(píng)論   

          2005-09-19 13:30 by usherlight
          Java沒(méi)有Enum嗎?

          # re: 神奇的重構(gòu)技術(shù)(《重構(gòu)》讀書(shū)筆記 一)  回復(fù)  更多評(píng)論   

          2005-09-19 14:59 by TiGERTiAN
          好像tiger里面新增了Enum..

          # re: 神奇的重構(gòu)技術(shù)(《重構(gòu)》讀書(shū)筆記 一)  回復(fù)  更多評(píng)論   

          2005-09-19 15:18 by ^ Mustang ^
          tiger李已經(jīng)有enumeration了,不用多此一舉了

          # re: 神奇的重構(gòu)技術(shù)(《重構(gòu)》讀書(shū)筆記 一)  回復(fù)  更多評(píng)論   

          2005-09-20 13:33 by ^ Mustang ^
          你有沒(méi)有看過(guò)Tiger中enum的實(shí)現(xiàn)?你以為enum僅僅是一個(gè)面向過(guò)程的數(shù)據(jù)結(jié)構(gòu)?Tiger中的enum是純面向?qū)ο蟮模锩娣庋b了很多方法,只不過(guò)你使用的時(shí)候覺(jué)察不到而已。

          # re: 神奇的重構(gòu)技術(shù)(《重構(gòu)》讀書(shū)筆記 一)  回復(fù)  更多評(píng)論   

          2005-09-20 13:36 by JavaExplore
          en 我覺(jué)得這種方法完全面向?qū)ο?是一種很不錯(cuò)的設(shè)計(jì)
          沒(méi)有使用過(guò)Tiger中的enum,有機(jī)會(huì)一定看看

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 长宁县| 北海市| 彰武县| 洪洞县| 东安县| 巴中市| 会宁县| 五原县| 清苑县| 晋中市| 东乌珠穆沁旗| 河曲县| 阿克| 长顺县| 临朐县| 武乡县| 卓尼县| 宜宾县| 读书| 射洪县| 吕梁市| 九江市| 即墨市| 柯坪县| 安福县| 从江县| 庐江县| 大竹县| 牟定县| 河曲县| 木兰县| 洞头县| 德保县| 札达县| 交城县| 黄大仙区| 望城县| 惠安县| 沈阳市| 榆中县| 双流县|