Передача класса в Hashmap и как получить значение с помощью ключа

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

Мой поток идет сюда, когда я вызываю метод getExpo из другого класса, передавая значение ключа. используя значение ключа, мне нужно получить правильный класс, и с помощью этого класса нужно создать экземпляр объекта и вернуть объект. Чтобы создать объект, мне нужно передать аргументы, так как класс не имеет конструкторов по умолчанию.

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

Мой класс идет сюда

public class ExampleFactory {

    static {
        HashMap<String,Class<?>> hmap = new HashMap<String,Class<?>>();

        hmap.put("jxpath", JXPathExpression.class);
        hmap.put("spel", SpelExpression.class);
    }

    public Predicate getExpo(String key,String expression) {

        // Need to get the class using key value and instantiate the object for the class
        // but i need to pass parameters in order to create the object.something like this

        //JXPathExpression object = new JXPathExpression(expression);
        return null;
    }
}

person Jessie    schedule 04.04.2012    source источник


Ответы (1)


Пытаться

Class aClass = hmap.get(key);
Constructor constructor = aClass.getConstructor(new Class[]{String.class});
return (Predicate) constructor.newInstance(expression);
person Luca    schedule 04.04.2012
comment
Спасибо за ваш ответ ...... когда я реализую его в методе getEcho .... Class aClass = hmap.get (key); я получаю сообщение об ошибке в hmap, так как я реализовал hashmap в статическом блоке, я не могу получить к нему доступ. - person Jessie; 04.04.2012
comment
Мне нужна другая помощь....... для некоторых классов мне нужно передать два аргумента, например: (строка, класс‹?› тип) например: (выражение, Boolean.class), как это реализовать? и как выбрать, какой конструктор выполнять... один класс имеет один аргумент только со строкой....... другой класс имеет два аргумента String и Class‹?› - person Jessie; 04.04.2012