Решение в Java выражается в D (отражение)
Я переопределяю Java-программу на D. Я использовал фабричный шаблон, то есть из данных "myclass" "5.3,6,8,10" я использую рефлексию для вызова конструктора.
myclass(5.3 ,6,8,10);
Как я могу решить ту же проблему в D, то есть, учитывая имя класса и параметры, которые принимает конструктор (только примитивы), создать экземпляр этого класса, вызвав конструктор в параметрах?
Одно очевидное решение заключается в следующем: создайте огромный оператор switch/case с именами классов в качестве case, и заставьте конструктор взять в качестве аргумента double[]. Это ужасно, так как мне нужно добавить каждый новый класс в этот список.
Я мог бы заставить каждый класс статически добавлять себя в какую-то глобальную карту, сопоставляя имя класса конструктору.
1 ответ
Вы можете иметь список с вспомогательными объектами. Вспомогательные объекты (MiniFactory) в основном имеют метод тестирования и метод фабрики, так что вы можете сказать:
for (int i=0; i<max_classes; i++) {
MiniFactory f = factoryList[i];
if (f.typeIsMatching(inputString))
return f.createObject(inputArgs);
}
Если повезет, вы можете использовать шаблоны для определения мини-заводов.