如鵬網 大學生計算機學習社區

          CowNew開源團隊

          http://www.cownew.com 郵件請聯系 about521 at 163.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks

          公告

          “如鵬教育”(http://www.RuPeng.com )是一個為計算機、信息等IT類專業在校大學生服務的學習社區。 每周舉辦免費講座,為大一新生答疑解惑,幫大二、大三學生解決學習問題,幫同學提高實戰開發能力,幫大四學生增強求職技巧,成功應聘名企。

          常用鏈接

          留言簿(83)

          隨筆分類

          隨筆檔案

          新聞檔案

          相冊

          友情鏈接

          團隊成員

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          作者楊中科是CowNew開源團隊JDBMonitor項目組的開發人員。
          CowNew開源團隊網站 http://www.cownew.com
          論壇 http://www.cownew.com/newpeng/
          轉載請注明此版權信息

          我個人是極力反對不必要的downcasting的,但是在使用java的集合類的時候確是不可避免的,因為JDK5之前的集合中只能存儲Object類型,所以看到一個List的時候,你也不知道里邊放的是什么數據類型,只能膽戰心驚的來下轉型:Integer i = (Integer)list.get(i)。
          好在JDK5可以使用泛型了,這個問題也就迎刃而解了。這樣就再也不會去去問其他開發人員“你List里放的是什么類型的對象?”,再也不會望著一大堆以“老祖先”形式表現的object了發呆了,終于可以看到容器中存的這些對象的類型了。
          但是在有的情況下我們還是不能使用JDK5的,比如你的正在開發的系統是基于JDK1.4的,那么遷移到JDK5是有一定風險的,或者你開發的模塊要被JDK5一下的程序使用的,那么就暫時放棄JDK5的這個新特性了。
          那么沒有泛型我們就沒法解決這個問題了嗎?非也!鳥槍!呵呵。
          一種方式是自己包裝一下List寫一個自己的專有數據類型的List,比如
          class IntegerList()
          {
          ?? private List list;
          ?? ......
          ?? public void add(Integer i)
          ?? {
          ???? list.add(i);
          ?? }
          ?? public Integer get(int i)
          ?? {
          ????? return (Integer)list.get(i);
          ?? }
          }
          這樣做的缺點就是對每個數據類型都要生成一個集合類,無疑加大了代碼量。
          另一種方式就是使用數組解決此問題,因為數組中的數據類型是清晰的,比如Integer[] ia = new Integer[5];,一眼就可以看出其中存儲的是什么類型。
          最好用的數據庫監控、日志工具JDBMonitor就是通過這種方式解決此問題的。JDBMonitor的二進制jar包和源代碼都可以從 http://www.cownew.com 下載得到。
          打開com.cownew.JDBMonitor.jdbc.connect
          定位到:
          List lisList = configInfo.getListenerInfoList();
          DBListenerInfo[] dbListenerInfos = new DBListenerInfo[lisList.size()];
          for(int i=0,n=lisList.size();i<n;i++)
          {
          ??? DBListenerInfo lisInfo = (DBListenerInfo) lisList.get(i);
          ??? dbListenerInfos[i] = lisInfo;
          }????
          return new DBConnection(cn,dbListenerInfos);??
          程序把多個監聽器對象信息DBListenerInfo拼轉成DBListenerInfo數組,然后傳遞給DBConnection。
          DBConnection接收到dbListenerInfos會把它轉發給DBLogger做為其構造函數的參數:
          private DBLogger(DBListenerInfo[] dbListenerInfos)
          這樣在DBLogger內部就可以很清晰的知道dbListenerInfos中的數據類型了:
          for(int i=0,n=dbListenerInfos.length;i<n;i++)
          {
          ?? ...
          ?? DBListenerInfo info = dbListenerInfos[i];
          ?? ...
          }

          在系統的接口邊界處傳遞的數據類型非常明確,不會因為傳遞一個光禿禿的List而不知道其類型,然后膽戰心驚的進行類型轉換了。
          因此我認為在一個方法或者類的內部可以采用List等進行數據的處理,但是當需要與外部(相對于類來說就是其他類,相對于方法來說就是其他方法)交換多個同構對象的時候,最好轉換成數組傳遞,這樣就清晰多了。

          posted on 2006-06-02 23:41 CowNew開源團隊 閱讀(745) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 陈巴尔虎旗| 筠连县| 出国| 松滋市| 梁平县| 临漳县| 慈利县| 松溪县| 临猗县| 宁乡县| 江门市| 从化市| 治县。| 无棣县| 临潭县| 盘锦市| 哈巴河县| 新源县| 富民县| 阳新县| 太湖县| 永年县| 泽库县| 长葛市| 阜新市| 大姚县| 邵武市| 福泉市| 稷山县| 峡江县| 碌曲县| 临汾市| 泰宁县| 获嘉县| 个旧市| 太白县| 施秉县| 南木林县| 潼关县| 弥勒县| 保靖县|