Решение в Java выражается в D (отражение) - PullRequest
0 голосов
/ 22 июня 2011

Я переопределяю Java-программу на D. Я использовал фабричный шаблон, то есть из данных «myclass» «5.3, 6,8,10» я использую рефлексию для вызова конструктора

myclass(5.3 ,6,8,10);

Как я могу решить ту же проблему в D, то есть, учитывая имя класса и параметры конструктор принимает (только примитивы), создает экземпляр этого класса, вызывая конструктор в параметрах?

Одним из очевидных решений является следующее: сделать огромный оператор switch / case, с именами классов в качестве падежей и конструктор принимает в качестве аргумента двойное значение []. Это ужасно, так как мне нужно добавлять каждый новый класс в этот список.

Я мог бы заставить каждый класс статически добавлять себя в какую-то глобальную карту, Как-то привязать имя класса к конструктору.

1 Ответ

0 голосов
/ 22 июня 2011

У вас может быть список с вспомогательными объектами. Вспомогательные объекты (MiniFactory) в основном имеют метод тестирования и метод фабрики, так что вы можете сказать:

for (int i=0; i<max_classes; i++) {
    MiniFactory f = factoryList[i];
    if (f.typeIsMatching(inputString))
        return f.createObject(inputArgs);
}

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

...