我想在这种情况下,使用依赖注入Implementation
内实例化类型:依赖注入的循环
public interface Implementable{[...]}
public class Implementation implements Implementable{[...]}
public class DummyClass()
{
private List<Implementable> testList;
public DummyClass()
{
testList = new ArrayList<Implementable>();
for(int i = 0; i < 10; i++)
{
Implementable testVar = new Implementation(i);
testList.add(testVar);
}
}
}
虽然我设法收集多了,这是不可能的。无论是通过构造函数注入还是使用泛型。另外,我更喜欢不依靠外部库来实现这一目标的本地解决方案。
编辑: 任何解决方案将需要DummyClass
就不会知道哪一个实现的InterfaceType
是在循环内被实例化。
我正在考虑使用泛型,但由于InterfaceType testVar = new T(i);
是不允许的,因此失败。另外,由于需要参数的构造函数,newInstance()
方法不可行。虽然这仍然是可能的,但它需要太多的反思(getConstructor
)和类型安全性的损失,因为我对干净方法的尝试。
我非常满意地听到我试图达到的目标无法以任何可推荐的方式实现。这个问题是希望我确实错过了一些东西。
EDIT2: 我试图去同一个类似的解决方案的一个由drewmoore提供而是跨越,我没有想过一个缺陷来了。
接口不声明构造函数的任何要求。有了这个方法,我将不得不在接口的所有实现中使用相同的构造函数。
这让我想起了建造者模式。这仍然与界面需要定义构建方法一样需要警惕,因此需要再次制定所有实现的构建要求。
是否有其他延迟施工方式?也就是说,一种方法可以使我注入我想要使用的实现实例(public DummyClass(InterfaceType implementation)
),但只能在循环内部构建(或构建或初始化)它,然后才能返回它自己的副本。
但话又说回来。我越来越觉得我试图达到的目标是不可能的。或者不应该因为不合理的额外复杂性或强加的限制而完成。我可能宁愿接受这个类对实现的直接依赖,并感谢drewmoore对她的见解。
的问题是,我也不清楚。你能否添加更多关于你想要实现的细节? – Numbers 2014-10-03 22:25:47
我想'DummyClass'不要依赖'Implementation'。只在接口'InterfaceType'上。我可以看到可能实现的唯一途径似乎是注入。只有在我的情况下,我不能简单地注入一个实例并使用它,因为循环会根据循环计数器创建不同的实例。 – 2014-10-03 22:50:03