程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 集合庫與方便使用集合

集合庫與方便使用集合

編輯:關於JAVA

由於集合是我們經常都要用到的一種工具,所以一個集合庫是十分必要的,它應該可以方便地重復使用。這樣一來,我們就可以方便地取用各種集合,將其插入自己的程序。Java提供了這樣的一個庫,盡管它在Java 1.0和1.1中都顯得非常有限(Java 1.2的集合庫則無疑是一個傑作)。

1. 下溯造型與模板/通用性
為了使這些集合能夠重復使用,或者“再生”,Java提供了一種通用類型,以前曾把它叫作“Object”。單根結構意味著、所有東西歸根結底都是一個對象”!所以容納了Object的一個集合實際可以容納任何東西。這使我們對它的重復使用變得非常簡便。
為使用這樣的一個集合,只需添加指向它的對象句柄即可,以後可以通過句柄重新使用對象。但由於集合只能容納Object,所以在我們向集合裡添加對象句柄時,它會上溯造型成Object,這樣便丟失了它的身份或者標識信息。再次使用它的時候,會得到一個Object句柄,而非指向我們早先置入的那個類型的句柄。所以怎樣才能歸還它的本來面貌,調用早先置入集合的那個對象的有用接口呢?
在這裡,我們再次用到了造型(Cast)。但這一次不是在分級結構中上溯造型成一種更“通用”的類型。而是下溯造型成一種更“特殊”的類型。這種造型方法叫作“下溯造型”(Downcasting)。舉個例子來說,我們知道在上溯造型的時候,Circle(圓)屬於Shape(幾何形狀)的一種類型,所以上溯造型是安全的。但我們不知道一個Object到底是Circle還是Shape,所以很難保證下溯造型的安全進行,除非確切地知道自己要操作的是什麼。
但這也不是絕對危險的,因為假如下溯造型成錯誤的東西,會得到我們稱為“違例”(Exception)的一種運行期錯誤。我們稍後即會對此進行解釋。但在從一個集合提取對象句柄時,必須用某種方式准確地記住它們是什麼,以保證下溯造型的正確進行。
下溯造型和運行期檢查都要求花額外的時間來運行程序,而且程序員必須付出額外的精力。既然如此,我們能不能創建一個“智能”集合,令其知道自己容納的類型呢?這樣做可消除下溯造型的必要以及潛在的錯誤。答案是肯定的,我們可以采用“參數化類型”,它們是編譯器能自動定制的類,可與特定的類型配合。例如,通過使用一個參數化集合,編譯器可對那個集合進行定制,使其只接受Shape,而且只提取Shape。
參數化類型是C++一個重要的組成部分,這部分是C++沒有單根結構的緣故。在C++中,用於實現參數化類型的關鍵字是template(模板)。Java目前尚未提供參數化類型,因為由於使用的是單根結構,所以使用它顯得有些笨拙。但這並不能保證以後的版本不會實現,因為“generic”這個詞已被Java“保留到將來實現”(在Ada語言中,“generic”被用來實現它的模板)。Java采取的這種關鍵字保留機制其實經常讓人摸不著頭腦,很難斷定以後會發生什麼事情。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved