【发布时间】:2020-03-05 07:59:45
【问题描述】:
我的部分代码如下所示:
EntityTypeEnum entityType = EntityTypeEnum.fromName(entityTypeName).orElseThrow(...);
EntityService<? extends AbstractEntityDto> entityService = entityServiceFactory.getEntityService(importType);
return getFooArgs(bar)
.map(entityService::getListWithFooArgs)
.orElseGet(()->entityService.getListNoArgs());
有一个 enum,我通过它使用 entityServiceFactory 的静态方法获取服务类。然后我调用方法 getFooArgs(...),它返回 Optional。然后我想使用 EntityService 方法映射它或使用没有 args 的方法来获取“默认”值,当 getFooArgs 返回空 Optional 时。
public interface EntityService<T extends AbstractEntityDto> {
List<T> getListNoArgs();
List<T> getListWithFooArgs(FooArg fooArgs);
}
很遗憾,我从我的 IDE 中得到了 Bad return type in lambda expression: List<capture of ? extends AbstractEntityDto> cannot be converted to 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>
标签: java generics lambda optional