import java.util.Hashtable; class Test { public static void main(String[] args) { Hashtable h = new Hashtable(); h.put(new Integer(0), "value"); String s = (String)h.get(new Integer(0)); System.out.PRintln(s); } }
請(qǐng)注重 main 方法主體部分的第三行中需要進(jìn)行的數(shù)據(jù)類型轉(zhuǎn)換。因?yàn)?Java 類型系統(tǒng)相當(dāng)薄弱,因此代碼會(huì)因象上面那樣的數(shù)據(jù)類型轉(zhuǎn)換而漏洞百出。這些數(shù)據(jù)類型轉(zhuǎn)換不僅使 Java 代碼變得更加拖沓冗長(zhǎng),而且它們還降低了靜態(tài)類型檢查的價(jià)值(因?yàn)槊總€(gè)數(shù)據(jù)類型轉(zhuǎn)換都是一個(gè)選擇忽略靜態(tài)類型檢查的偽指令)。我們?cè)撊绾螖U(kuò)展該類型系統(tǒng),從而不必回避它呢?
例如,假定想將 factory 方法添加到 List 類中。這個(gè)靜態(tài)方法只帶一個(gè)參數(shù),也將是 List 唯一的元素(直到添加了其它元素)。因?yàn)槲覀兿M?List 成為其所包含的元素類型的泛型,所以希望靜態(tài) factory 方法帶有類型變量 T 這一參數(shù)并返回 List< T> 的實(shí)例。
但是我們確實(shí)希望該類型變量 T 能在方法級(jí)別上進(jìn)行聲明,因?yàn)樗鼤?huì)隨每次單獨(dú)的方法調(diào)用而發(fā)生改變(而且,正如我在下一篇文章中將討論的那樣,Tiger 設(shè)計(jì)的“怪習(xí)”規(guī)定靜態(tài)成員不在類級(jí)類型參數(shù)的范疇之內(nèi))