首页 大发大小单双玩法介绍 产品展示 新闻动态

新闻动态

你的位置:大发大小单双玩法 > 新闻动态 > 典型的Java语言级别(Language Level)不匹配问题常规解决

典型的Java语言级别(Language Level)不匹配问题常规解决

发布日期:2025-10-08 09:00    点击次数:95

问题描述

下面的代码,

public Optional decryptBasicInfo(String applyId) {

Optional po = basicInfoRepo.findFirstByApplyId(applyId);

if (!po.isEmpty) {

// do something

}

return po;

}

编译报错:

Usage of API documented as @since 11+

Set language level to 11 - Local variable syntax for lambda parameters

If a value is not present, returns true, otherwise false.

Returns:

true if a value is not present, otherwise false

Since:

11

Optional.isEmpty 方法是 Java 11 新增的 API,在 Java 8 中不存在,这个提示为了让我们使用Java 11的语言特性,这样编译器就会认识isEmpty方法。

问题是由于Java版本低于11,无法使用Optional.isEmpty方法。解决方案(前面两个解决方案)是升级Java版本到11以上,让项目支持 java 11,或者(方案三)是改代码,让Java 8中也可以编译通过。

解决方案一

点击IDEA的提示: [Set language level to 11],它会自动将当前模块的语言级别设置为11。这样,编译器就会按照Java 11的语法来检查代码,从而认识isEmpty方法。

解决方案二

在Java Compiler设置中,将语言级别设置为11。这样整个项目都会使用Java 11的语法。

可以设置单独的模块:

再次编译成功:

如果将语言级别设置为11,那么项目就需要在Java 11或更高版本的JVM上运行。

解决方案三

如果不能将项目升级到Java 11,那么可以将代码修改为使用!po.isPresent,这样在Java 8中也可以编译通过。