Я работаю над классом Configuration Loader, чтобы я мог изменять параметры своей программы через внешний текстовый файл (config.txt), а не перекомпилировать свой код при каждом внесенном мной изменении.
Было предложено, чтобы я использовал Reflection Java для этого, но я немного сбит с толку относительно того, как я мог бы на самом деле реализовать это.
Мне удалось успешно извлечь имя класса и аргументы для егоконструктор из моего текстового файла, но как мне перейти от этого к экземпляру объекта?
вот что у меня есть до сих пор моего метода:
public void loadObject(String classString, HashMap hm)
{
String className = props.getProperty(classString);
Class c = Class.forName(className);
}
classString - строка, содержащая имякласса, а hm - это хэш-карта, в которой параметры конструктора класса отображаются на их предполагаемые значения.
Т.е. для class Foo (int xPos, float yPos)
xPos будет отображаться на строку предполагаемого целого числа, а "yPos"msgstr "отображает строку заданного числа с плавающей запятой.Я хочу, чтобы мог вернуть, new Foo(hm.get"xPos".toInt, hm.get"yPost".toFloat)
, но я не уверен, как динамически использовать такой конструктор (проблема в том, что существует несколько возможных классов - возможно, это bar
вместоfoo
, например).
Я знаю, что можно сделать if / else на основе classString и просто вызвать соответствующий конструктор после его идентификации таким образом, но я хочу создатьболее расширяемый код, который не нужно переписывать каждый раз, когда я добавляю в программу новый класс.
Все возможные объекты наследуются от одного родительского объекта.