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

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

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

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

    CowNew開源團隊

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks
    作者楊中科是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開源團隊 閱讀(747) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲综合色视频在线观看| 国产一区二区三区在线免费观看 | 18禁止看的免费污网站| 成年女性特黄午夜视频免费看| 日本免费人成黄页在线观看视频| 亚洲欧洲∨国产一区二区三区| 精品亚洲成A人无码成A在线观看 | 免费国产成人高清在线观看麻豆| 亚洲国产三级在线观看| 亚洲国产成人精品无码区花野真一 | 免费福利电影在线观看| 岛国片在线免费观看| 亚洲春色在线视频| 美女啪啪网站又黄又免费| 97国产在线公开免费观看| 国产亚洲情侣一区二区无| 亚洲精品无码中文久久字幕| 99精品热线在线观看免费视频| 久久精品亚洲男人的天堂| 两性色午夜视频免费网| 亚洲高清最新av网站| 亚洲精品美女久久久久久久| 国产片免费福利片永久| 国产亚洲精aa在线看| 4虎1515hh永久免费| 亚洲综合激情五月丁香六月| 最近中文字幕免费完整| 亚洲大成色www永久网址| 国产一区二区三区在线观看免费 | 国产精品免费高清在线观看| 久久精品国产亚洲7777| 国产精品99久久免费观看| 狠狠色香婷婷久久亚洲精品| 成人黄色免费网址| 亚洲情a成黄在线观看动漫尤物| 精品97国产免费人成视频| 亚洲国产主播精品极品网红 | 亚洲日韩中文字幕无码一区| 亚洲AⅤ视频一区二区三区| 亚洲AV永久无码精品放毛片| 成年女人免费v片|