Помещение классов в Hashtable - PullRequest
       31

Помещение классов в Hashtable

0 голосов
/ 31 августа 2011

У меня есть набор классов, которые реализуют определенный интерфейс.Я поместил все эти классы в Hashtable ht следующим образом:

ht.put(str,backend.instructions.ADC.class);

Но когда я вызываю get() функцию хеш-таблицы и пытаюсь привести объект в качестве объекта интерфейса, яполучаю ClassCastException:

           InsInterface4 obj=(InsInterface4) ht.get(str);

Как я могу разрешить то же самое?Мне нужно вызывать функции класса, но я даже не могу правильно разыграть?Что в этом плохого?

Ответы [ 3 ]

3 голосов
/ 31 августа 2011

Потому что вы ставите Class и пытаетесь получить Interface4.Если вы хотите иметь экземпляры, а не определения внутри карты, используйте: t.put(str, new ADC()).Несколько замечаний:

  • Вы также можете использовать дженерики, чтобы гарантировать, что вы положили правильные вещи во время компиляции: Hashtable<String, Interface4>.
  • Предпочитают HashMap Hashtable
1 голос
/ 31 августа 2011

backend.instructions.ADC.class - это класс, а не экземпляр этого класса.

Вы можете сделать

Class<InsInterface4> clazz = (Class<InsInterface4>) ht.get(str);
// if there is a default constructor
InsInterface4 obj = (InsInterface4_ clazz.newInstance();
0 голосов
/ 31 августа 2011

Вы поместили определение класса в таблицу. Вам нужно поместить фактические экземпляры класса.

 backend.instructions.ADC anAdc = new  backend.instructions.ADC();
 someOther.instructions.OTH anOth = new  someOther.instructions.OTH();

 ht.put("adc", anAdc);
 ht.put("oth", anOth);

 InsInterface4 obj=(InsInterface4) ht.get("adc");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...