【发布时间】:2021-08-23 03:20:45
【问题描述】:
为什么会出现异常'ad return type in lambda expression: AuthenticatedUser cannot be convert to User'?如果 Optional 为空,我只想返回这个 AuthenticatedUser。
User user = new User("d","d","d");
return s -> {
List<User> list = new ArrayList<>(Arrays.asList(TestData.BASIC_USER_ENTITY, TestData.ADMIN_USER_ENTITY));
return new AuthenticatedUser(
list.stream()
.filter(u -> u.getUsername().equals(s))
.findAny()
.orElseGet(() -> new AuthenticatedUser(new User()))); // Bad return type in lambda expression: AuthenticatedUser cannot be converted to User
};
【问题讨论】:
-
我认为这是因为
AuthenticatedUser没有扩展User。它可能应该。 -
不,它没有,它需要用户在构造函数中。
-
将
.orElseGet(() -> new AuthenticatedUser(new User()))更改为.orElseGet(() -> new User())(或.orElseGet(User::new))。orElseGet(...)-lambda 的返回类型必须匹配(即可分配给)Optional的泛型类型(即User,而不是AuthenticatedUser)。 -
@Turing85 谢谢!