BlogJava 聯(lián)系 聚合 管理  

          Blog Stats

          隨筆分類

          文章分類

          隨筆檔案

          文章檔案


          kevin-guan

          在學習異常時,看到這段代碼例子,有點不知所措的感覺,一時半會還看不懂,這才感覺自己的代碼水平還真是夠爛的。然而我想我能夠勝任大多數(shù)公司的開發(fā)工作,因為實現(xiàn)了功能是最關(guān)鍵的,很多項目僅僅是一堆開源框架的大雜燴,沒人會關(guān)心你寫得怎么樣。

          package chapter9;

          /**
           * 
          @author Administrator 用數(shù)組模擬對象
           
          */

          public class DynamicFields {
              
          private Object[][] fields;

              
          public DynamicFields(int initialSize) {
                  fields 
          = new Object[initialSize][2];
                  
          for (int i = 0; i < initialSize; i++{
                      fields[i] 
          = new Object[] nullnull };
                  }

              }


              
          public String toString() {
                  StringBuffer result 
          = new StringBuffer();
                  
          for (int i = 0; i < fields.length; i++{
                      result.append(fields[i][
          0]);
                      result.append(
          "");
                      result.append(fields[i][
          1]);
                      result.append(
          "\n");
                  }

                  
          return result.toString();
              }


              
          private int hasField(String id) {
                  
          for (int i = 0; i < fields.length; i++{
                      
          if (id.equals(fields[i][0])) {
                          
          return i;
                      }

                  }

                  
          return -1;
              }


              
          private int getFieldNuber(String id) throws NoSuchFieldException {
                  
          int fieldNum = hasField(id);
                  
          if (fieldNum == -1{
                      
          throw new NoSuchFieldException();
                  }

                  
          return fieldNum;
              }


              
          /**
               * 
          @param id
               * 
          @return 如果數(shù)組長度不夠則新增長度
               
          */

              
          private int makeField(String id) {
                  
          for (int i = 0; i < fields.length; i++{
                      
          if (fields[i][0== null{
                          fields[i][
          0= id;
                          
          return i;
                      }

                  }

                  Object[][] tmp 
          = new Object[fields.length + 1][2];
                  
          for (int i = 0; i < fields.length; i++{
                      tmp[i] 
          = fields[i];
                  }

                  
          for (int i = fields.length; i < tmp.length; i++{
                      tmp[i] 
          = new Object[] nullnull };
                  }

                  fields 
          = tmp;
                  
          return makeField(id);
              }


              
          public Object getField(String id) throws NoSuchFieldException {
                  
          return fields[getFieldNuber(id)];
              }


              
          public Object setField(String id, Object value)
                      
          throws DynamicFieldsException {
                  
          if (value == null{
                      DynamicFieldsException def 
          = new DynamicFieldsException();
                      def.initCause(
          new NullPointerException());
                      
          throw def;
                  }

                  
          int fieldNumber = hasField(id);
                  
          if (fieldNumber == -1{
                      fieldNumber 
          = makeField(id);
                  }

                  Object result 
          = null;
                  
          try {
                      result 
          = getField(id);
                  }
           catch (NoSuchFieldException e) {
                      
          throw new RuntimeException(e);
                  }

                  fields[fieldNumber][
          1= value;
                  
          return result;
              }


              
          public static void main(String[] args) {
                  DynamicFields df 
          = new DynamicFields(3);
                  
          try {
                      
          // df.setField("test", null);
                      df.setField("d""A value for d");
                      df.setField(
          "number"new Integer(47));
                      df.setField(
          "number2"new Integer(48));
                      System.out.println(
          "first:================");
                      System.out.println(df);
                      df.setField(
          "d""A new value for d");
                      df.setField(
          "number3"new Integer(11));
                      System.out.println(
          "second:===============");
                      System.out.println(df);
                      System.out.println(df.getField(
          "d"));
                      Object field 
          = df.getField("a3");
                  }
           catch (DynamicFieldsException e) {
                      
          throw new RuntimeException(e);
                  }
           catch (NoSuchFieldException e) {
                      
          throw new RuntimeException(e);
                  }

              }

          }


          class DynamicFieldsException extends Exception {
              
          public DynamicFieldsException() {
                  
          super();
              }

          }


          看別人的代碼,這才知道原來可以這么寫的。我還真是夠膚淺的。這個類是實現(xiàn)一個可以動態(tài)改變的數(shù)組。
          posted on 2008-01-23 14:02 KevinGuan 閱讀(165) 評論(0)  編輯  收藏 所屬分類: Thinking in java學習筆記

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 金堂县| 雷山县| 惠来县| 延吉市| 津市市| 安多县| 隆子县| 河津市| 庆阳市| 平邑县| 麟游县| 房山区| 青铜峡市| 日照市| 昭平县| 资中县| 康平县| 房山区| 平塘县| 咸宁市| 绥棱县| 同德县| 阳东县| 海安县| 土默特右旗| 任丘市| 理塘县| 肇东市| 镇赉县| 洪湖市| 临泉县| 拉萨市| 平和县| 电白县| 宣威市| 米泉市| 鹿泉市| 正蓝旗| 神池县| 积石山| 托克逊县|