Как кодировать чередующийся класс Generic Factory в Java - PullRequest
0 голосов
/ 11 февраля 2019

Предположим, у нас есть интерфейс public interface Doll {} и класс, который его реализует:

public class BaseDoll implements Doll {
    //Implementation of class;
    public BaseDoll(String data) {
        //construct class based on that string.
    }
}

Теперь предположим, что у нас есть универсальный класс

public class ExtDoll<T extends Doll> implements Doll {
    T data;

    public ExtDoll(T data) {
        this.data = data;
    }
}

Моя цель - создать экземпляры объектов вформа ExtDoll<... <ExtDoll<BaseDoll>...>.Я думаю, что хороший подход - это фабричный класс

public class DollFactory<T extends Doll> {
    public T getInstance(String data) {
        //what to write here?
    }
}

с вызовом

DollFactory<ExtDoll<ExtDoll<BaseDoll>>> df = new DollFactory<>();
ExtDoll<ExtDoll<BaseDoll>> d = df.getInstance("string that describes the obj");

Идея этого codenippet - это своего рода Матрешка.В моей настоящей программе у меня есть разные классы, которые реализуют Doll, отсюда и общий подход.Я думал, что смогу решить это рекурсивно:

   public T getInstance(String data) {
    //1:Use reflection to get the type of the layer below
    //2:Create a DollFactory element with the type of the layer below <-- is that even possible?
    //3: adapt the string and create the object of the lower layer with that new Factory
    //4: create the final object
}

, но я не уверен, как создать фабрику в шаге 2), так как я не могу извлечь Идентификатор из объекта класса, и ядумаю, что это невозможно в Java (что имеет смысл).У вас есть разные предложения по решению этой проблемы?Я рад за любую помощь.Спасибо!

...