您现在的位置是:首页 > 文章详情

Android Studio中如何支持使用Lambda表达式

日期:2018-04-19点击:400

Java8引入了lambda表达式,Lambda 表达式”(lambda expression)是一个匿名函数,本质上就是可以传递给其他函数的一小段代码。

下面来看一下如何让自己的项目支持使用lambda表达式,以达到简化代码的目的。
先来举个栗子,看看我们平常写点击事件是如何写的

普通写法:
 tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //处理逻辑 } }); 
Lambda表达式写法
 tv.setOnClickListener(v->Toast.makeText(this,"this is lambda",Toast.LENGTH_SHORT).show()); 

是不是代码变得简洁了很多。
下面就介绍一下使用Android studio 3.0.1新建项目,配置支持Lambda表达式。
gradle android插件版本为:classpath 'com.android.tools.build:gradle:3.0.1'

可能有以下三种情形:

(1)集成了Kotlin环境,但项目是混合开发的,.java和.kt的代码都有。

此时,在.kt的代码中可以直接使用lambda表达式,而在java代码中,如果直接使用的话,会报如下提示
Lambda expressions are not supported at this language level


img_6a83ae66f80a9e0b0bb1f17ca2c5ded9.png
image.png

此时,我们只需要在app的build.gradle中的android{ }内添加如下配置即可。

 compileOptions { targetCompatibility 1.8 sourceCompatibility 1.8 } 
(2)纯Kotlin开发环境,只在Kotlin代码中使用lambda表达式

Kotlin标准库大量的使用了lambda表达式,所以在Kotlin代码中可以直接使用。只要有Kotlin环境的基本配置即可。

 button.setOnClickListener { v -> Toast.makeText(applicationContext,"this is lambda",Toast.LENGTH_SHORT).show() } 
(3)纯Java代码开发环境,没有引入Kotlin支持库。

也只需要在app的build.gradle中的android{ }内添加如下配置即可。

 compileOptions { targetCompatibility 1.8 sourceCompatibility 1.8 } 

综上,正常情况下,其实要支持lambda,只要添加上面compileOptions 的配置就行了。

配置到我自己的项目

我也是在app.build中添加:

 compileOptions { targetCompatibility 1.8 sourceCompatibility 1.8 } 

很简单吧,但是当我配置到我自己项目的时候,居然!!!出错了.......竟然如此尴尬......
(我项目的gradle插件版本是: classpath 'com.android.tools.build:gradle:2.2.2' ,项目配置了Kotlin环境,Kotlin版本是: ext.kotlin_version = '1.2.10' 的)


img_3e7fb337001e74c4eb7423e0d58b65e1.png
image.png

编译报错:Error:Jack is required to support java 8 language features. Either enable Jack or remove sourceCompatibility JavaVersion.VERSION_1_8.

img_c249374a78f973dcc608b76a3da9c4a9.png
image.png

于是我搜索了一下 解决办法,说是在app.build中加入jackOptions 中就行了。

defaultConfig { jackOptions { enabled true } } 

同步了一下,结果.....并没有成功!报下面的错误:
Kotlin Gradle plugin does not support the deprecated Jack toolchain.Disable Jack or revert to Kotlin Gradle plugin version 1.1.1.


img_139ebf598e69ed574ae47ebea433669b.png
image.png

遇到这种工程构建的错误,确实是挺烦人的,但是大家一定要有耐心,仔细查错,不要着急。
按照上面提示:Kotlin版本不支持配置jackOptions ,要我把版本Kotlin改成1.1.1。OK,那就把Kotlin版本改成1.1.1咯,同步一下,OK。但是发现这样的方式,导致项目构建很慢,于是乎又找了另外一种方法配置。

简单一步到位的配置支持Lambda

针对我的项目从头开始,手动去添加支持lambda的插件,也是OK的,这样一步到位,不会出错,完整的配置为:
工程的build.gradle中添加

 dependencies { classpath 'com.android.tools.build:gradle:2.2.2' //classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //java中支持lambda classpath 'me.tatarka:gradle-retrolambda:3.2.5' } 

app.gradle中添加

//apply plugin: 'android-apt' //java中支持lambda apply plugin: 'me.tatarka.retrolambda' android{ compileOptions { targetCompatibility 1.8 sourceCompatibility 1.8 } } 

搞定!!!(android-apt插件可配可不配都行)

原文链接:https://yq.aliyun.com/articles/638347
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章