496
京東網上商城
《數據結構與抽象: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
注:在類Ordered Pair的定義中,T是泛型參數,
跟在類頭的標識符name之後。
沒有跟在類定義中的構造方法名的後麵。
T(不是)可以是數據域、方法參數及局部變量的數據類型,它可以是方法的返回類型。
示例:創建OrderedPair對象。例如,為創建String對象的有序對,可以寫如下的語句:
現在,OrderedPair定義中作為數據類型出現的T,都將使用String來替代。
現在這個形式也是可以的。
下列語句是如何使用對象fruit的示例:
注意,有序對fruit有OrderedPair方法changeOrder和getFirst。另外,getFirst返回的對象是String對象,它有方法length。
還要注意的是,有些是非法的。不能將不是字符串的對象對賦給對象fruit:
問題是,不能將OrderedPair轉換為OrderedPair。但是可以創建Integer對象的對,如下所示:
現在考慮附錄B的程序清單B-1中給出的類Name。如果變量namePair具有類型OrderedPair,你就能創建使用繼承派生於Name的任何類的對象對。例如,如果類FormalName派生於Name,但增加了一個頭銜,如先生或女士,則namePair可以含有Name和FormalName的對象。
注:在泛型類name的客戶中,如下形式的表達式
創建了類的對象。從Java 7版本起,如果將這個表達式賦給一個數據類型是name的變量,則可以忽略表達式中的class-type。即可以寫如下的語句:
類的對象的數據類型是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.例如,本章示例中給出的語句,應該有如下的開頭:
OrderedPair這個版本的不足是,如果是由不同的和不相關類型的對象組成的對,編譯器不能提示你。所以大概會這樣寫
最後更新:2017-06-26 16:33:22