我有一个创建哈希表的方法..该方法的签名是
void CreateHashTable(String KeyType,String ValueType)
我想要这样的东西
Hashtable<KeyType,ValueType> hashtable1;
这样我就可以根据我的要求创建哈希表键值 但是如何?我需要数据类型而不是String 我认为这是可以理解的
应该非常感谢任何帮助 谢谢
答案 0 :(得分:2)
泛型是一个编译时功能,所以你在运行时做的任何事情,例如按名称查找一个类,超出了编译器确定的能力。您必须提供Class&lt; K&gt;编译器可以确定哪些内容。
BTW:除非必须,否则不要使用Hashtable。它被Java 1.2(1998)中的J2SE Collections取代
答案 1 :(得分:0)
您可能想要做类似
的事情Class key = Class.forName(KeyType);
Class value = Class.forName(ValueType);
return new HashTable<key, value>();
答案 2 :(得分: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));
}
答案 3 :(得分:0)
当你不知道它需要什么类型时,你打算如何处理Hashtable(如果你不需要线程安全,你可以使用Hashmap)或其他集合?在某些时候,你需要知道你的集合中有什么用来处理这些值,除非你真的在寻找类型无差异的类型安全。
如果您知道自己想要什么,例如Hashtable<String, String>
您可以使用Java 7的“diamond operator”.Josh Bloch的 Effective Java 显示如何在Java 5中执行相同的操作。泛型章节的PDF是here,搜索“工厂”这个词,作为例子。
这两者都要求您提前提供所需内容的模板,例如: HashMap<String, String>
而不只是单词“String”和“String”。我认为工厂连锁店的this article描述了你正在寻找的东西,但这并不容易。
我能给你的最好建议是重新考虑你的设计。我很确定你真的不需要做你想做的事情。也许如果你解释了你试图解决的问题,我们可以提出一个更好的方法。