Android Studio:lambda不起作用

时间:2015-05-24 08:14:07

标签: android android-studio lambda java-8

尝试使用lambda表达式时,我遇到了一些Gradle构建错误:

  

错误:(41,100)错误:-source 1.7不支持lambda表达式   (使用-source 8或更高版本来启用lambda表达式)

     

错误:任务':app:compileDebugJava'执行失败。   编译失败;有关详细信息,请参阅编译器错误输出。

快速搜索帮助我理解lambda表达式仅支持JDK 1.8,显然我没有使用它。

我的问题是我的计算机上安装了JDK 1.8(我正在使用Yosemite),在模块设置→SDK位置→JDK位置它说:

JDK location screenshot

但在设置模块→应用程序→源/目标兼容性中,没有选项,例如" 1.8",只有Java 1.6或1.7的选项。

Source/Target Compatibility screenshot

我知道我可以在没有匿名功能的情况下管理,但我仍然想解决这个问题。

1 个答案:

答案 0 :(得分:4)

更新:2017年6月19日

Jack现已弃用,Java 8支持将在未来集成到当前工具中。来自这篇博文 Future of Java 8 Language Feature Support on Android

  

我们决定直接在当前的javac和dx工具集中添加对Java 8语言功能的支持,并弃用Jack工具链。有了这个新方向,依赖于Java类文件格式的现有工具和插件应该继续工作。展望未来,Android构建系统将本身支持Java 8语言功能。我们的目标是在未来几周内将其作为Android Studio的一部分推出,我们希望尽早与您分享此决定。

更新:2016年4月26日

新版Android Studio(2.1)支持Java 8功能。以下是Android Developers blogspot post的摘录:

  

... Android Studio 2.1版本包括对新Jack compiler的支持以及对Java 8的支持。

     

使用Jack编译器,lambdas,方法引用,编译时类型注释,交集类型和类型推断可在Android平台的所有版本上使用。 Android N及更高版本提供默认和静态方法以及可重复的注释。

     

要在使用N Developer Preview进行开发时使用Java 8语言功能,您需要使用Jack编译器。新建项目向导[文件→新建→项目]为面向N的项目生成正确的配置。

上一个答案:

Android还不支持Java 1.8(它最多只支持1.7),所以你不能使用lambdas(作为其中一条评论也提到过)。

This answer gives more detail on Android Studio's compatibility;它说:

  

如果你想使用lambdas,这是Android 8中Java 8的主要功能之一,你可以使用gradle-retrolamba

如果您想了解有关使用gradle-retrolambdathis answer gives a lot of detail on doing that

的详情

否则(这可能是我认为最好的选择),你需要回到使用anonymous classes(即在改为使用lambda函数之前如何使用它)。