熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

不使用泛型如何保證程序的可讀性

2013-11-23 19:36:17  來源: Java核心技術 
作者楊中科是CowNew開源團隊JDBMonitor項目組的開發人員
CowNew開源團隊網站 
論壇 
轉載請注明此版權信息 
我個人是極力反對不必要的downcasting的但是在使用java的集合類的時候確是不可避免的因為JDK之前的集合中只能存儲Object類型所以看到一個List的時候你也不知道裡邊放的是什麼數據類型只能膽戰心驚的來下轉型Integer i = (Integer)listget(i)
好在JDK可以使用泛型了這個問題也就迎刃而解了這樣就再也不會去去問其他開發人員你List裡放的是什麼類型的對象?再也不會望著一大堆以老祖先形式表現的object了發呆了終於可以看到容器中存的這些對象的類型了
但是在有的情況下我們還是不能使用JDK比如你的正在開發的系統是基於JDK那麼遷移到JDK是有一定風險的或者你開發的模塊要被JDK一下的程序使用的那麼就暫時放棄JDK的這個新特性了
那麼沒有泛型我們就沒法解決這個問題了嗎?非也!鳥槍!呵呵
一種方式是自己包裝一下List寫一個自己的專有數據類型的List比如
class IntegerList()
{
   private List list;
   
   public void add(Integer i)
   {
     listadd(i);
   }
   public Integer get(int i)
   {
      return (Integer)listget(i);
   } 
}
這樣做的缺點就是對每個數據類型都要生成一個集合類無疑加大了代碼量
另一種方式就是使用數組解決此問題因為數組中的數據類型是清晰的比如Integer[] ia = new Integer[];一眼就可以看出其中存儲的是什麼類型
最好用的數據庫監控日志工具JDBMonitor就是通過這種方式解決此問題的JDBMonitor的二進制jar包和源代碼都可以從 ;下載得到
打開wnewnnect
定位到
List lisList = configInfogetListenerInfoList();
DBListenerInfo[] dbListenerInfos = new DBListenerInfo[lisListsize()];
for(int i=n=lisListsize();i<n;i++)
{
    DBListenerInfo lisInfo = (DBListenerInfo) lisListget(i);
    dbListenerInfos[i] = lisInfo;
}     
return new DBConnection(cndbListenerInfos);   
程序把多個監聽器對象信息DBListenerInfo拼轉成DBListenerInfo數組然後傳遞給DBConnection
DBConnection接收到dbListenerInfos會把它轉發給DBLogger做為其構造函數的參數
private DBLogger(DBListenerInfo[] dbListenerInfos)
這樣在DBLogger內部就可以很清晰的知道dbListenerInfos中的數據類型了
for(int i=n=dbListenerInfoslength;i<n;i++)
{
   
   DBListenerInfo info = dbListenerInfos[i];
   
}

在系統的接口邊界處傳遞的數據類型非常明確不會因為傳遞一個光禿禿的List而不知道其類型然後膽戰心驚的進行類型轉換了
因此我認為在一個方法或者類的內部可以采用List等進行數據的處理但是當需要與外部(相對於類來說就是其他類相對於方法來說就是其他方法)交換多個同構對象的時候最好轉換成數組傳遞這樣就清晰多了
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27163.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.