閱讀496 返回首頁    go 京東網上商城


《數據結構與抽象:Java語言描述(原書第4版)》一JI1.1.2 泛型類

本節書摘來華章計算機《數據結構與抽象:Java語言描述(原書第4版)》一書中的第1章 ,[美]弗蘭克M.卡拉諾(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 羅得島大學  新英格蘭理工學院 辛運幃 饒一梅 譯 更多章節內容可以訪問雲棲社區“華章計算機”公眾號查看。

JI1.1.2 泛型類

程序清單JI1-2展示了前一節開始討論的類OrderedPair。該類假定我們關心對象對中對象的次序。符號在類頭的標識符OrderedPair之後。在定義中,T表示兩個私有數據域的數據類型、構造方法的兩個參數的數據類型、方法getFirst和getSecond的返回類型,以及方法changeOrder中局部變量temp的數據類型。
程序清單JI1-2 類OrderedPair
image
image

注:在類Ordered Pair的定義中,T是泛型參數,
跟在類頭的標識符name之後。
沒有跟在類定義中的構造方法名的後麵。
T(不是)可以是數據域、方法參數及局部變量的數據類型,它可以是方法的返回類型。
示例:創建OrderedPair對象。例如,為創建String對象的有序對,可以寫如下的語句:
image

現在,OrderedPair定義中作為數據類型出現的T,都將使用String來替代。

程序設計技巧:在Java 7之前,前麵這條Java語句都需要寫兩遍數據類型String,如下所示:
image

現在這個形式也是可以的。
下列語句是如何使用對象fruit的示例:
image

這些語句的輸出是
image

注意,有序對fruit有OrderedPair方法changeOrder和getFirst。另外,getFirst返回的對象是String對象,它有方法length。
還要注意的是,有些是非法的。不能將不是字符串的對象對賦給對象fruit:
image

問題是,不能將OrderedPair轉換為OrderedPair。但是可以創建Integer對象的對,如下所示:
image

輸出不出所料是:
image

現在考慮附錄B的程序清單B-1中給出的類Name。如果變量namePair具有類型OrderedPair,你就能創建使用繼承派生於Name的任何類的對象對。例如,如果類FormalName派生於Name,但增加了一個頭銜,如先生或女士,則namePair可以含有Name和FormalName的對象。
注:在泛型類name的客戶中,如下形式的表達式
image

創建了類的對象。從Java 7版本起,如果將這個表達式賦給一個數據類型是name的變量,則可以忽略表達式中的class-type。即可以寫如下的語句:
image

類的對象的數據類型是name,不是name。

自測題1 像String或Name這樣的類必須定義哪些方法才能讓OrderedPair的方法toString正常工作?
自測題2 考慮程序清單JI1-2中所給出的類OrderedPair。假定我們沒有使用泛型,而是忽略,將私有域的數據類型、方法參數及局部變量聲明為Object而不是T。這些修改對類的使用有什麼影響?
自測題3 你能使用程序清單JI1-2中定義的類OrderedPair,讓兩個不同及不相關的數據類型的對象配對嗎?為什麼?
自測題4 使用附錄C的程序清單C-1中定義的類Name,寫語句,將兩名學生組成實驗搭檔。

自測題答案
1. toString
2.例如,本章示例中給出的語句,應該有如下的開頭:
image

OrderedPair這個版本的不足是,如果是由不同的和不相關類型的對象組成的對,編譯器不能提示你。所以大概會這樣寫
image

3.不能。類僅定義了一個泛型。
4.image

最後更新:2017-06-26 16:33:22

  上一篇:go  《數據結構與抽象:Java語言描述(原書第4版)》一第2章
  下一篇:go  工信部批準,“中國開源軟件推進聯盟PostgreSQL分會”正式成立