Java Android和Lambda
我需要将一些代码与Java lambda函数的广泛使用结合起来。 我有几个限制要求我使用EclipseMars开发我的项目,使用最新的ADT插件,而不是Android Studio 问题是,使用Lambda函数需要使用1.8 JDK兼容性,但如果设置为1.8 JDK兼容性,我会收到以下消息:Java Android和Lambda,java,android,eclipse,lambda,adt,Java,Android,Eclipse,Lambda,Adt,我需要将一些代码与Java lambda函数的广泛使用结合起来。 我有几个限制要求我使用EclipseMars开发我的项目,使用最新的ADT插件,而不是Android Studio 问题是,使用Lambda函数需要使用1.8 JDK兼容性,但如果设置为1.8 JDK兼容性,我会收到以下消息: Android requires compiler compliance level 5.0 or 6.0. Found '1.8' instead. 这两个人怎么能和睦相处呢 编辑: 正如我所问的关于A
Android requires compiler compliance level 5.0 or 6.0. Found '1.8' instead.
这两个人怎么能和睦相处呢
编辑:
正如我所问的关于ADT Eclipse的问题一样,这并不是建议问题的重复,而且自从上次更新以来,Android确实支持Java 8,所以这不仅不是重复,而且这个问题现在(在上次更新1.5年后)已经过时了。我认为这是行不通的 为了使用lambdas,您需要源代码兼容性级别1.8。为了让DEX编译器工作,您需要目标兼容性1.7。Eclipse不允许您将目标兼容性设置为低于源兼容性(下图) 请注意,这与IntelliJ的习惯无关,IntelliJ认为它比您更清楚您的代码应该是什么样子。它可以向您显示lambda,即使实际代码是匿名类
您当前无法(至少在Android 5.1.1之前)在Android上使用lambda函数。 Lambda函数需要Dalvik和ART目前都不支持的新Dalvik(不一定是JVM!)操作码(释放变量、框Lambda、取消框Lambda、捕获变量、创建Lambda、调用Lambda) 看起来谷歌可能已经计划(尽管似乎还没有官方消息)对Post5.1.1(API级别23及更高版本)的Java8支持。至少已经添加了对API级别的明确引用的支持: : 将新的-X/--实验标志添加到[dis]汇编尚未出现的操作码
- 添加新操作码释放变量、框lambda、取消框lambda、捕获变量、创建lambda、调用lambda
- 添加对编码25x指令的支持
- 添加LambdaTest以检查新操作码是否正确组装/反汇编
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
有关详细信息,请参阅和
正如@dhke所说,Android上还不支持Java8
使用Java8,为Java6/7构建
但您仍然可以使用JDK 8开发Android应用程序。您只需将源代码兼容性设置为6或7,具体取决于您的minSDKVersion
。因此,您将失去Java8中引入的任何新特性,比如您的案例中的lambda
南达后港
由于您广泛使用lambda,因此可能是您的一个选择。它为Java 8之前的版本提供lambda的后端口。它有Maven/Gradle/command-line插件来启用支持
其他后端口
如果您需要其他Java 8功能,AFAIK将为Java 8日期时间API提供后端口支持。颠倒Lambda语法
据我所知,在新的Java8Lambda语法中所做的一切都可以使用老式Java代码来完成,比如匿名内部类。()()
为了减轻撤消Lambda语法的负担,一些ide(如)可以建议在Lambda语法的任意方向上自动修改代码。只需单击一次批准,语法就会自动神奇地交换。请参阅上的NetBeans文档
下面是一个NetBeans的屏幕截图,它提供了将按钮从Lambda语法转换为匿名内部类的功能。请注意,鼠标指针单击第107行的灯泡图标
要在IDE中启用此功能,需要在项目中临时启用Java8。撤消所有Lambda语法后,将项目切换回Java6/7。在NetBeans中,启用Java 8的方法是在您的项目中>Properties>Sources>Source/Binary格式(弹出菜单)>1.8
Android确实支持Java8,所以这不仅仅是重复
从开始发布Android支持有限的Java 8的功能请参见
要开始使用这些功能,您需要下载并设置Android N Preview SDK,其中包括
Gradle所需的工具链和更新的Android插件。如果你
尚未安装Android N预览SDK,请参阅
支持的Java 8语言功能和API
Android目前不支持所有Java 8语言功能。
但是,在开发应用程序时,现在可以使用以下功能
针对Android N预览版:
Android还支持一些额外的Java 8功能,您可以从更新中看到完整的细节:几天之后。它正式支持一项新的计划
从2017年3月14日起,谷歌
决定将对Java8语言特性的支持直接添加到当前的javac和dx工具集中,并反对使用Jack工具链。有了这个新的方向,依赖于Java类文件格式的现有工具和插件应该继续工作。今后,Android构建系统将在本机支持Java8语言功能。我们的目标是在未来几周内将其作为Android Studio的一部分发布,我们希望尽早与您分享这一决定
因此,我们可能不必在Android Studio中等待太久的Java 8。这个问题的可能重复性是什么?阅读错误消息,他们不能。你只是有
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}