Единственный способ определить конструктор без аргументов для CompanyAuditor, создавать новые экземпляры, используя javax.enterprise.inject.Instance.get. А потом передайте все аргументы, используя общедоступные методы. Поэтому ваш конструктор с аргументом должен быть разделен на один без аргументов и дополнительный общедоступный метод для установки этого аргумента. Кроме того, вы должны написать собственное выражение лямбды, которое сложнее, чем просто CompanyAuditor :: new.
Полный пример:
@Inject
@New // javax.enterprise.inject.New to always request a new object
private Instance<CompanyAuditor> auditorInjector;
public List returnAllWrappedAuditors() {
return compDAO.getAll()
.stream()
.map(ca -> {
CompanyAuditor auditor = auditorInjector.get();
auditor.setWrappedObject(ca);
return auditor;
})
.collect(Collectors.toList());
}
Afternote:
CDI не очень прост в использовании при динамическом построении объектов, то при инъекционном превосходном качестве зависимостей. Поэтому это немного более многословно, чем вызов конструктора для создания новых объектов.
CDI бобы должны быть либо конструктор без параметров или все параметры annoted с @Inject (который не помогает в вашем случае) See Java EE 7 tutorial
Это маловероятно, что при условии, фрагмент кода является унаследованного кода, поскольку она требует Java-8 функций. Предоставьте также устаревший код. –
@TagirValeev Спасибо за ответ. Первоначально он был «за цикл» над списком объектов Компании, возвращаемых CompanyDAO.getAll(), создавая объекты CompanyAuditor для каждого объекта «Компания» и возвращающий список объектов CompanyAuditor. Кто-то еще переписал его с помощью потоков. – ShellDragon