Решение в 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);
}

Если повезет, вы можете использовать шаблоны для определения мини-заводов.

Другие вопросы по тегам