gpt4 book ai didi

java - Java中的方法不能直接返回值,为什么?

转载 作者:行者123 更新时间:2023-12-01 19:33:27 25 4
gpt4 key购买 nike

这将编译

 public ResponseEntity<User> getUserById(@PathVariable(value = "id") Long userId) throws UserNotFoundException {
ResponseEntity u = userRepository.findById(userId)
.map(p->ResponseEntity.ok(new UserResource(p)))
.orElseThrow(() -> new UserNotFoundException(userId));
return u;
}

但这不会

 public ResponseEntity<User> getUserById(@PathVariable(value = "id") Long userId) throws UserNotFoundException {
return userRepository.findById(userId)
.map(p->ResponseEntity.ok(new UserResource(p)))
.orElseThrow(() -> new UserNotFoundException(userId));
}

怎么会这样?

最佳答案

第一个代码片段返回 ResponseEntity<UserResource> 的实例然后将其分配给原始类型变量。然后原始类型变量返回到泛型类型变量(这应该会产生警告)。如果任何代码到达错误类型的 ResponseEntity 字段,它将在运行时抛出异常。因此,第一个代码可以编译,因为编译器允许将原始类型变量分配给泛型,反之亦然。

第二个代码片段不使用原始类型,因此完成了泛型类型兼容性检查(通常在编译时进行,因为由于删除而在运行时不存在泛型类型) - 因此它正确地无法编译。

关于java - Java中的方法不能直接返回值,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58700890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com