2011-03-29 182 views
2

我已創建一個hashtable..that方法的簽名的方法是Java的哈希表

void CreateHashTable(String KeyType,String ValueType) 

我想是這樣的

Hashtable<KeyType,ValueType> hashtable1; 

讓我創造我的哈希表鍵,按我的價值要求 但是如何?我需要,而不是數據類型的字符串 的,我認爲這是可以理解

任何幫助應該是極大的讚賞 感謝

+1

我認爲可能這是不可能的 – 2011-03-29 16:04:58

回答

0

你可能想這樣做

Class key = Class.forName(KeyType); 
Class value = Class.forName(ValueType); 
return new HashTable<key, value>(); 
+0

你是如何解決該函數返回無效的? :D – 2011-03-29 16:10:36

+2

-1。這不會編譯。 – 2011-03-29 16:10:50

+0

@Jan Zyka,哈,我沒有注意到這一點。 @西蒙尼克森,我沒有機會去測試它,但我不確定它是否可行。我想有沒有辦法做到這一點,然後給予兩個字符串輸入.... – 2011-03-29 16:13:20

0
public static <K,V> HashMap<K,V> create(Class<K> keytype, Class<V> valtype) { 
    return new HashMap<K,V>(); 
} 

鑑於字符串指定的對象類型,你可以Class.forName但這不會給你一個類型安全的泛型,即:

public static HashMap create(String keyClassName, String valClassName) { 
    return create(Class.forName(keyClassName), Class.forName(valClassName)); 
} 
2

泛型是一個編譯時的功能,所以你在運行時所做的任何事情,例如按名稱查找類,超出了編譯器確定的能力。您必須提供編譯器可以確定的類別< K>。

順便說一句:不要使用哈希表,除非你必須。它被Java 1.2中的J2SE Collections取代(1998)

+0

你能否給我提供一些鏈接,因爲我不熟悉這些鏈接,因此我可以獲得有關集合的基本知識 – 2011-03-29 16:41:40

0

當你不知道它需要什麼類型時,你將如何處理Hashtable(或HashMap,如果你不需要線程安全的話)或其他集合?在某些情況下,您需要知道集合中的內容以使用這些值,除非您真的在尋找類型無差異的類型安全性。

如果你知道你想要什麼,例如您可以使用Java 7的「diamond operator」。Josh Bloch的有效Java顯示瞭如何在Java 5中執行相同的操作。以此爲例。

這兩個要求你提前提供你想要的模板,例如HashMap<String, String>而不只是單詞「字符串」和「字符串」。我認爲工廠鏈上的this article描述了你正在尋找的東西,但這並不容易。

我可以給你的最好的建議是重新考慮你的設計。我很確定你並不需要做你想做的事情。也許如果你解釋了你正在努力解決的問題,我們可以想出更好的方法。