是否可以放置Iterable<? extends Module> modules
而不创建临时变量ms
并添加新元素?
List<Module> ms = new ArrayList<>(super.superModules);
ms.add(new newModule());
Injector injector = Guice.createInjector(super.stage, ms);
在父母中:
protected List<Module> superModules= new ArrayList<>(Arrays.asList(CucumberModules.createScenarioModule(), new aaaModule(), new bbbModule(), new cccModule()));
我的调用方法:
public static Injector createInjector(Stage stage, Iterable<? extends Module> modules) {
return new InternalInjectorCreator().stage(stage).addModules(modules).build();
}
由于该createInjector
方法不需要List
,因此您无需构造List
。您可以使用
Injector injector = Guice.createInjector(super.stage, () ->
Stream.concat(super.superModules.stream(), Stream.of(new NewModule())).iterator());
的Iterable
是一个功能性的接口,作为其唯一的抽象方法是iterator()
,它可以通过提供一种功能被满足Iterator
需求。
有第三方库提供Iterator
合成,因此您可以将其super.superModules.iterator()
与new NewModule()
其他元素结合使用。使用内置的工具,我们可以构造一个串联的流,并将其转换为迭代器。这仍然避免为组合的集合分配新的存储。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句