我想在Guice中实现类似于以下内容:

public MyClass {

    private final InjectedObject[] injectedObjects;

    @Inject
    public MyClass(InjectedObject[] injectedObjects) {
        this.injectedObjects=injectedObjects;
    }
}

即我希望能够创建对象的一定数量的实例,并将它们作为数组注入(inject)到另一个对象中。我可能可以这样做:
public MyClass {

    private final InjectedObject[] injectedObjects;

    @Inject
    public MyClass(InjectedObjectProvider injectedObjectProvider) {
        this.injectedObjects=injectedObjectProvider.getArrayOfInjectedObjects(5);
    }
}

...但是我想知道是否还有另一条路线更优雅?

最佳答案

我很好奇为什么要热切地创建几个对象。您可能会成功注入(inject)Provider<InjectedObject>,并在每次需要实例时调用Provider.get()。如果您确实需要5,则可以循环构建它们:

public MyClass {
  private final List<InjectedObject> injectedObjects;

  @Inject
  public MyClass(Provider<InjectedObject> injectedObjectProvider) {
    injectedObjects = new ArrayList<InjectedObject>();
    for (int i = 0; i < 5; i++) {
      injectedObjects.add(injectedObjectProvider.get());
    }
  }
}

09-26 05:23