java IntelliJ IDEA不支持Lambda?

7fhtutme  于 2023-02-11  发布在  Java
关注(0)|答案(4)|浏览(299)

我正在使用这个教程使用lambda表达式。
Spring Boot - Bookmarks
但IntelliJ总是说:cannot resolve method(<lambda expression>).
我需要检查什么?

this.accountRepository.findByUsername(userId).orElseThrow(() -> new UserNotFoundException(userId));
r1zhe5dt

r1zhe5dt1#

您的IntelliJ或项目似乎未设置为使用Java 8。
1.打开项目结构
1.查看项目设置|项目项目SDK的值应为1.8
1.查看平台设置|SDK,应列出1.8
它应该看起来像这样:

lsmepo6l

lsmepo6l2#

您需要将“项目语言级别”更改为“8 -Lambda,类型注解等"。您可以在“项目设置”-〉“项目”中找到此选项

tkclm6bt

tkclm6bt3#

除了上面的答案,请查看pom.xml文件。源和目标应该是1.8或更高。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
kt06eoxx

kt06eoxx4#

我得到了同样的错误,在更简单的上下文中,我猜,并没有改变版本。

return employeeRepo.findEmployeeById(id)

所以我尝试通过ID查找Employee,但是如果ID不存在怎么办?
在我的存储库中,我有以下内容:

Employee findEmployeeById(Long id);

Spring很好地理解了它,可以获取Employee,但在没有匹配的Id的情况下就不行了,因此有必要处理该异常。
我的错误在于:

Optional findEmployeeById(Long id);

我是说这是可选的,但不是什么,一旦我改变为:

Optional<Employee> findEmployeeById(Long id);

后来我解决了这个问题

return employeeRepo.findEmployeeById(id)
            .orElseThrow(() -> new UserNotFoundException("User by id " + id + " was not found."));

在您的情况下,您有:

findByUsername(userId).orElseThrow(()

但是在你的repo中你使用了Optional〈entity〉吗?我猜对于Java 8你可以使用Optional,但是对于Java 17你需要指定,类似于:

Optional<User> findUserById(Long userId);

相关问题