IDEA中Kotlin 1.7.0项目出现OpenEndRange虚假访问报错
问题原因
这是IDEA内置的Kotlin代码分析器(及插件)版本与项目使用的Kotlin 1.7.0不匹配导致的虚假报错:
- Kotlin 1.7.20及后续版本中,
IntRange的contains方法底层依赖了新引入的OpenEndRange接口; - 当你用
LocalDate.get(TemporalField)的返回值(类型为Long,会自动转换为Int)和IntRange做in判断时,高版本分析器会尝试用新的泛型contains逻辑校验,但项目依赖的1.7.0标准库中不存在OpenEndRange类,因此触发报错; - 硬编码的Int值会直接匹配1.7.0版本中
IntRange.contains(Int)的原生方法,分析器不会走新逻辑,所以无报错;而编译运行正常是因为实际编译时用的是项目指定的1.7.0标准库,走的是旧版in实现,完全兼容。
解决办法
- 统一Kotlin版本(推荐):将项目的Kotlin版本升级到1.7.20或更高,让IDE分析器与项目依赖的标准库版本保持一致,从根源消除版本冲突。修改Maven中
kotlin-maven-plugin的版本和kotlin-stdlib的依赖版本即可。 - 调整IDE分析器版本:打开IDEA设置,进入
Languages & Frameworks > Kotlin,将Kotlin compiler version和Kotlin language version都设置为1.7.0,强制IDE用对应版本的规则分析代码,避免用高版本逻辑校验旧版本代码。 - 临时压制报错:如果暂时不想升级或调整版本,可以在报错的代码行或所在函数上添加
@Suppress("UNRESOLVED_REFERENCE")注解,让IDEA忽略这个虚假报错提示。
内容的提问来源于stack exchange,提问作者wujek
相关产品推荐
相关产品推荐

