Java Hashtables

时间:2011-03-29 15:58:33

标签: java hashtable key-value

我有一个创建哈希表的方法..该方法的签名是

  void CreateHashTable(String KeyType,String ValueType)

我想要这样的东西

 Hashtable<KeyType,ValueType> hashtable1;

这样我就可以根据我的要求创建哈希表键值 但是如何?我需要数据类型而不是String 我认为这是可以理解的

应该非常感谢任何帮助 谢谢

4 个答案:

答案 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描述了你正在寻找的东西,但这并不容易。

我能给你的最好建议是重新考虑你的设计。我很确定你真的不需要做你想做的事情。也许如果你解释了你试图解决的问题,我们可以提出一个更好的方法。