我正在尝试为所有子类实现一个通用提供程序,想象一些模式:
SuperComponent.class
是ComponentA.class
and的父级ComponentB.class
。我有提供者:
@Provides
<T extends SuperComponent> List<T> providesComponents(Provider<T> provider) {
List<T> componentList = new ArrayList<>();
for (int i = 0; i < 5; i++) {
componentList.add(provider.get());
}
return componentList;
}
这个想法是在需要对象List<ComponentA>
和/或List<ComponentB>
在另一个类的构造函数中调用此提供程序。想象一下:
public class ResourceManager {
List<ComponentA> componentAList;
List<ComponentB> componentBList;
@Inject
public ResourceManager(List<ComponentA> componentAList, List<ComponentB> componentBList) {
this.componentAList = componentAList;
this.componentBList = componentBList;
}
我收到一条错误消息:
1) com.google.inject.Provider<T> cannot be used as a key; It is not fully specified.
我怎样才能让它工作?我知道我可以为每个创建不同的提供程序,List<ComponentA>
但List <ComponentB>
我需要它,因为在现实中组件的数量远大于 2...