Java Hashtables - PullRequest
       21

Java Hashtables

2 голосов
/ 29 марта 2011

У меня есть метод, который создает хеш-таблицу. Сигнатура метода:

  void CreateHashTable(String KeyType,String ValueType)

Я хочу что-то вроде этого

 Hashtable<KeyType,ValueType> hashtable1;

, чтобы я создал свой ключ хеш-таблицы, значение в соответствии ск моему требованию, но как ??Мне нужен тип данных вместо строки. Я думаю, что это понятно

Любая помощь должна быть высоко оценена. Спасибо

Ответы [ 4 ]

2 голосов
/ 29 марта 2011

Обобщения являются функцией времени компиляции, поэтому все, что вы делаете во время выполнения, например, поиск класса по имени находится за пределами возможностей компилятора определить. Вы должны предоставить класс , с которым компилятор может что-то определить.

Кстати: не используйте Hashtable, если нет необходимости. Он был заменен коллекциями J2SE в Java 1.2 (1998)

0 голосов
/ 29 марта 2011

Что вы собираетесь делать с Hashtable (или Hashmap, если вам не нужна безопасность потоков) или другой коллекцией, когда вы не знаете, какие типы нужны? В какой-то момент вам нужно знать, что находится в вашей коллекции, чтобы работать со значениями, если вы действительно не ищете безопасность типов с безразличием типов.

Если вы знаете, чего хотите, например, Hashtable<String, String> вы можете использовать " оператор ромба " в Java 7. Эффективная Java Джоша Блоха показывает, как сделать то же самое в Java 5. PDF-файл главы об обобщениях здесь , найдите слово «фабрика», которое будет приведено в примере.

Оба требуют, чтобы вы заранее предоставили шаблон того, что вы хотите, например, HashMap<String, String>, а не только слова «Строка» и «Строка». Я думаю эта статья о фабричных цепях описывает то, что вы ищете, но это не просто.

Лучший совет, который я могу вам дать, - переосмыслить ваш дизайн. Я совершенно уверен, что вам не нужно делать то, что вы пытаетесь сделать. Может быть, если вы объяснили проблему, которую вы пытаетесь решить, мы можем придумать лучший подход.

0 голосов
/ 29 марта 2011
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));
}
0 голосов
/ 29 марта 2011

Вы, вероятно, хотите сделать что-то вроде

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