我有课A
适用于 List<String>
。但是这个类之外的任何人都不需要知道它适用于字符串。但是,我还想提供该类应该使用的具体实现,因为它是 List
(通过依赖注入(inject))。
A
应该看起来像这样
public class A {
private ListFactory listFactory; //this gets injected from the outside
public A(ListFactory listFactory) {
this.listFactory = listFactory;
}
public void a() {
List<String> = listFactory.createList();
//...
}
}
以及调用者类B
像这样的东西
public class B {
public void b() {
ListFactory factory = new ArrayListFactory(); //we want class A to use ArrayList
A a = new A(factory);
//...
}
}
ListFactory
将是由 ArrayListFactory
实现的接口(interface)创建ArrayList
s。
精髓:
我不想要那个B
不得不提String
某处。我也不想要那个A
不得不提ArrayList
某处。
这可能吗?那么ListFactory
会怎样呢?和ArrayListFactory
必须看吗?
最佳答案
我认为这比你做的要简单:
public interface Factory {
public <T> List<T> create();
}
public class FactoryImpl implements Factory {
public <T> ArrayList<T> create() {
return new ArrayList<T>();
}
}
...
Factory f = new FactoryImpl();
List<String> strings = f.create();
...
关于java - 集合的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6611881/