如何在java中编写交错的泛型工厂类

如何在java中编写交错的泛型工厂类,java,generics,factory,Java,Generics,Factory,假设我们有一个接口 公共接口玩偶{} 以及实现它的类: public class BaseDoll implements Doll { //Implementation of class; public BaseDoll(String data) { //construct class based on that string. } } 现在假设我们有一个泛型类 public class ExtDoll<T extends Doll> imp

假设我们有一个接口
公共接口玩偶{}
以及实现它的类:

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实现Doll{
T数据;
公共ExtDoll(T数据){
这个数据=数据;
}
}

我的目标是以
ExtDollWell的形式实例化对象。我的问题是如何以给定的形式创建对象。这是具体的吗?我当然可以解释导致这个问题的原因;特别是擦除。你想做的是不可能的。当您在编译后声明
DollFactory…
时,它将成为
DollFactory
。在运行时,工厂
df
无法知道编译时使用的类型参数。有一些技巧可以解决这个问题,但你真正想要的很可能是类似于链表的东西。这是一个典型的“x-y问题”。这个问题并没有解决你的实际问题,而是探讨了一个最可能不适合这个问题的具体解决方案。谢谢你,我会关注它。我认为,当你认为这是一个值得实施的解决方案时,是时候停止写作,而是开始在板井上思考和绘图了,我的问题是如何以给定的形式创建对象。这是具体的吗?我当然可以解释导致这个问题的原因;特别是擦除。你想做的是不可能的。当您在编译后声明
DollFactory…
时,它将成为
DollFactory
。在运行时,工厂
df
无法知道编译时使用的类型参数。有一些技巧可以解决这个问题,但你真正想要的很可能是类似于链表的东西。这是一个典型的“x-y问题”。这个问题并没有解决你的实际问题,而是探讨了一个最可能不适合这个问题的具体解决方案。谢谢你,我会关注它。我认为当你认为这是一个值得实施的解决方案时,是时候停止写作,转而开始在黑板上思考和绘图了
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");
   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
}