我没有经常使用泛型,但我觉得我想要的东西实际上是不可能的。我们假设我有一个参数化界面,如:
public interface baseType<M, V> {}
我有两个类使用具体类型参数实现此接口
public class ConcreteA implements baseType<MyType1, MyType2> {}
public class ConcreteB implements baseType<MyType3, MyType4> {}
现在让我们说我想让一个Factory用在客户端代码中,根据类型决定实现哪个具体类:
public class MyFactory {
public static baseType<?, ?> getConcreteObjectForType(MyType type){
switch(type){
case TYPE_A:
return new ConcreteA();
case TYPE_B:
return new ConcreteB();
}
public Enum MyType { TYPE_A, TYPE_B }
}
在我想做的客户端代码中
baseType concrete = MyFactory.getConcreteObjectForType(MyType.TYPE_A);
这样的事情可能吗?如果我不能以这种方式建造工厂,那么这种情景的正确创造模式是什么?