我的代码的一部分看起来像这样:
EntityTypeEnum entityType = EntityTypeEnum.fromName(entityTypeName).orElseThrow(...);
EntityService<? extends AbstractEntityDto> entityService = entityServiceFactory.getEntityService(importType);
return getFooArgs(bar)
.map(entityService::getListWithFooArgs)
.orElseGet(()->entityService.getListNoArgs());
我可以使用从 entityServiceFactory 中的静态方法获取服务类,这是通过 enum 实现的。 然后我调用方法 getFooArgs(...),它返回 Optional< FooArg >。 然后,我想使用 EntityService 方法映射它,或者在 getFooArgs 返回空 Optional 时使用不带参数的方法获取“默认”值。
public interface EntityService<T extends AbstractEntityDto> {
List<T> getListNoArgs();
List<T> getListWithFooArgs(FooArg fooArgs);
}
遗憾的是,我从我的IDE中获得了lambda表达式中的错误返回类型:List<capture of ? extends AbstractEntityDto>无法转换为List<capture of ? extends AbstractEntityDto>
。 我所要做的是:
Optional<List<? extends AbstractEntityDto>> listOptional = getFooArgs(bar)
.map(entityService::getListWithFooArgs);
if(listOptional.isPresent())
return listOptional.get();
else
return entityService.getListNoArgs();
你能解释一下为什么会发生这种情况吗?我认为它与
?
和泛型有关,但我以为使用?
会消除很多类型限制。如果代码太少无法理解,请告诉我。
List<? extends AbstractEntityDto>
。 - ogarogar