Предположим, у нас есть интерфейс 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 (что имеет смысл).У вас есть разные предложения по решению этой проблемы?Я рад за любую помощь.Спасибо!