国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 11:57:16
字體:
來源:轉載
供稿:網友

作者楊中科是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等進行數據的處理,但是當需要與外部(相對于類來說就是其他類,相對于方法來說就是其他方法)交換多個同構對象的時候,最好轉換成數組傳遞,這樣就清楚多了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广东省| 贵州省| 修文县| 即墨市| 广德县| 平潭县| 焉耆| 正镶白旗| 蓝田县| 屏山县| 织金县| 惠东县| 扎兰屯市| 邳州市| 通辽市| 临西县| 澄迈县| 原平市| 开远市| 澜沧| 庄河市| 连云港市| 潮安县| 宣化县| 定日县| 中卫市| 白银市| 洞头县| 图木舒克市| 义乌市| 天镇县| 汉中市| 珠海市| 库车县| 株洲县| 水富县| 全州县| 南靖县| 台山市| 乌鲁木齐县| 洪洞县|