lambda表达式返回类型报错:AuthenticatedUser无法转换为User如何解决
异常原因
报错核心是orElseGet的返回值和Optional泛型不匹配:
- 你遍历的是
List<User>,filter查找后得到的是Optional<User>类型的结果 orElseGet要求传入的函数返回值必须和Optional的泛型保持一致,也就是要返回User类型,但你在orElseGet里返回的是AuthenticatedUser类型,不符合泛型匹配规则,因此抛出类型转换错误。
解决方法
你最终要把查到的用户对象传给外层的AuthenticatedUser构造方法,直接调整orElseGet的返回值为User类型即可:
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(User::new)); // 兜底直接返回User对象,外层统一封装为AuthenticatedUser };
如果AuthenticatedUser本身是User的子类,你确实需要在Optional阶段就返回AuthenticatedUser类型,可以手动转换Optional的泛型边界,不过日常场景用上述写法就足够满足需求。
内容的提问来源于stack exchange,提问作者user15599360
相关产品推荐
相关产品推荐

