Android配置Java8后部分Lambda表达式运行报错如何解决?
问题原因
你的项目本身的编译配置没有问题,之所以会出现这个矛盾的报错,是Android Studio的调试表达式求值器的独立配置和项目配置不同步导致的:
- 你在代码中直接编写的Lambda、Stream操作会走项目的
compileOptions配置,你已经设置了Java 8兼容,所以可以正常编译运行。 - 你在调试观察器中输入的表达式,走的是调试器独立的编译求值逻辑,该逻辑默认回退到了Java 1.6的源码级别,不支持Lambda表达式,因此抛出对应报错。
解决方案
按优先级依次执行以下操作即可解决:
- 修改调试器求值源码级别
打开Android StudioFile > Settings > Build, Execution, Deployment > Debugger > Java,将「Debugger evaluation source level」选项修改为1.8,重启Android Studio后重试。 - 统一项目JVM目标配置
在你的模块级build.gradle的android闭包中追加如下配置,避免配置歧义:
如果你项目没有引入Kotlin,该配置也可以正常添加,不会产生副作用。kotlinOptions { jvmTarget = "1.8" } - 清理编译缓存并重新同步
依次执行:- 点击顶部菜单栏
File > Sync Project with Gradle Files同步Gradle配置 - 执行
Build > Clean Project清理旧缓存 - 执行
Build > Rebuild Project全量编译项目
- 点击顶部菜单栏
- 临时规避方案
如果修改后调试观察器仍有偶发报错,可以将需要调试的链式Stream表达式提前写在代码中打断点,不要直接在观察器中输入带Lambda的复杂表达式进行即时求值。
内容的提问来源于stack exchange,提问作者william
相关产品推荐
相关产品推荐

