我學習使用java的一點體會(4) (轉)
本文的上一篇發表之後,承蒙各位網友關注,發表了很多評論,我感覺很多人對我寫得文章有誤解,大概是我表述不清楚的原因吧。這篇文章是對上一篇的補充,以一個示例闡述瞭解collection的重要性。
我在半年以前寫過一個printAll(Vector vector),具體程式碼如下
import .util.*;
public class UtilTool
{
public static void printAll ( Vector vector )
{
System.out.println( "the Collection is vector" );
System.out.println( vector.getClass().toString() );
Iterator iterator = vector.iterator();
while ( iterator.hasNext() )
{
System.out.println(iterator.next().toString());
}
}
public static void main( String[] arg )
{
Vector vector = new Vector();
vector.add( new Integer(1));
vector.add( new Integer(2));
vector.add( new Integer(3));
UtilTool.printAll(vector);
}
}
printAll這個函式設計的很不好——不夠通用,假如,還想列印HashSet型別的資料,你就必須過載printAll函式,程式碼如下
public static void printAll ( HashSet hashSet )
{
System.out.println( "the Collection is hashSet" );
System.out.println( hashSet.getClass().toString() );
Iterator iterator = hashSet.iterator();
while ( iterator.hasNext() )
{
System.out.println(iterator.next().toString());
}
}
printAll函式的程式碼重用率低。其實Vector和 HashSet都是Collection的實現,可以將printAll的引數型別改為Collection,而不必過載。程式碼如下
public static void printAll ( Collection collection )
{
System.out.println( "the Collection is collection" );
System.out.println( collection.getClass().toString() );
Iterator iterator = collection.iterator();
while ( iterator.hasNext() )
{
System.out.println(iterator.next().toString());
}
}
這樣就可以刪除printAll(Vector vector)和printAll(HashSet hashSet)函式了。
在設計函式時,應優先使用介面,而不是類。當然必須瞭解Vector 是Collection的實現。
如果對Collection的繼承關係不清楚,很容易濫用過載,以下程式碼是一個有問題的程式碼(摘自Effective Java Programming Language Gu)
public class CollectionClassifier{
public static String classify(Set s){
return "Set";
}
public static String classify(List l){
return "List";
}
public static String classify(Collection c){
return "Unknow Collection";
}
public static void main( String[] args )
Collection[] tests = new Collection[]{
new HashSet(),
new ArrayList(),
new HashMap().values()
}
for(int i=0;i System.out.println(classify(test[i])); } } 輸出的是三次"Unknown Collection",而不是你期望的列印"Set","List"以及"Unknown Collection"。這個程式錯誤的根源是對Collection層次結構不熟悉,而濫用過載導致。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-962527/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 我學習使用java的一點體會 (轉)Java
- 我學習使用java的一點體會(2) (轉)Java
- 我學習使用java的一點體會(3) (轉)Java
- 我學習使用java的一點體會(5) (轉)Java
- 我學習使用java的一點體會(8) (轉)Java
- 我的一點學習經驗 (轉)
- 學習ASP.NET的體會(一) (轉)ASP.NET
- Java學習過程的一些重點(轉)Java
- 我這幾年程式設計師生涯的一點體會(轉)程式設計師
- 學習java一定會用到的應用軟體Java
- 使用Immutable js的一點體會JS
- 我求職的體會 (轉)求職
- 使用Rust的幾點理由,加入我們,一起學習!Rust
- 我對ORACLE資料鎖的一點體會Oracle
- 學習EJB CMP/CMR 的心得體會 (轉)
- 學習SSD4的一點總結
- 轉行Java能學會嗎?零基礎學習Java的學習路線Java
- Java學習筆記--我的第一個Java程式Java筆記
- 對軟體開發的一點心得體會 (轉)
- Java隨筆-Java泛型的一點學習Java泛型
- java學習總結及心得體會Java
- 個人學習SMC的一點體會--回答dREAMhTEATER兄 (2千字)
- 介面和抽象類使用的一點體會抽象
- python學習心得體會(一)Python
- 一點看法, 一點體會 -- 國外與國內,數學與計算機 (轉)計算機
- 最近學習的體會
- 在VB應用程式中使用INI檔案的一點體會 (轉)
- 我的C學習之路 (轉)
- 學習專案管理理論後的體會(轉)專案管理
- 學習專案管理理論後的體會 (轉)專案管理
- 專案進度控制學習體會(轉)
- oracle的學習方法——關於測試的兩點體會Oracle
- java學習程序4Java
- 關於專案管理的一點體會-轉載專案管理
- 入門教程的一些學習體會
- java學習歷程——第一篇.如何使用java軟體Java
- 我是一個高中生學習Java?Java
- 學習Spring的體會Spring