如何在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
}