在Studio进行Aandroid开发使用Lambda语法!

什么是Lambda语法?为什么使用Lambda?Lambda的优点是什么?我该如何在开发中使用呢?


嗯嗯,相信你早听说过Lambda的大名了,别急别急,小兄弟听我娓娓道来


lambda表达式,它将允许我们将行为传到函数里。在Java 8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码。而定义行为最重要的那行代码,却混在中间不够突出。Lambda表达式取代了匿名类,取消了模板,允许用函数式风格编写代码。这样有时可读性更好,表达更清晰。

Lambda的优点是什么?优点就是代码简洁

为什么使用Lambda?还是简洁

比如我们开发点击事件写法

tvSensors.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        System.out.print("我要点击");
    }
});
 看到没,六行代码,有用的仅有那句打印语句,你会说虽然复杂了点,但我一般不这么写,我只要在监听里面写this,让那个父类实现方法,我只要在onclick方法写具体行为就可以了,比如这样 

mBtn_search.setOnClickListener(this);
mBtn_confirm.setOnClickListener(this);
嗯,这样看起来貌似这样好像很简洁,那如果我们使用线程呢?

new  Thread(new Runnable() {
    @Override
    public void run() {
        System.out.print("打印到控制台...啦啦啦");
    }
}).start();
你还能写个this么,就算能写,如果多个地方用到线程run方法怎么复写?不复写run方法,那要写多个匿名内部类一样臃肿不堪,况且你自定义的接口回调咋办...嗯嗯,看来是绕不过匿名函数6行代码的坎呀

上述例子都是在某个类中实现某个接口,然后传递到另外一个方法中作为参数,然后用来执行。但是本质上,他们要传递的就是接口中那一个方法的实现而已啊!有必要先创建类,再实例化,再传递给调用的位置吗?因为 Java 是纯面向对象的语言,像其他语言那样随随便便传个方法过来,那可不行,必须要这样。

在其他语言中你可能可以,但是,在 Java 中,不可以

Java 设计人员为了 Java 的简洁跟连贯性,一直拒绝为 Java 添加这种功能。

经过多年的努力,开发人员终于找到了符合 Java 编程习惯的 Lambda 表达式!

我们用Lambda表达式重新写一下上面的代码

tvSensors.setOnClickListener(event ->System.out.print("我要点击 "));
new Thread(() -> System.out.print("打印到控制台...啦啦啦")).start();
优美的让人窒息啊,甩开往日的冗余写法,阅读性一目了然有木有


大家一定很懵逼,简洁是简洁,但是看得好像似懂非懂啊,骚年别着急,现在就来教大家如何去写Lambda表达式!如果你嫌弃写Lambda语法打特殊符号麻烦,其实studio会帮你自动生成,这个后面我再说

首先介绍一下 Java 中 Lambda 表达式的格式:

(参数) -> 表达式

如果有参数就写上参数如  (String a,String b) -> System.out.print(a+b);  //如果参数类型可推断出,可以不写参数类型

如果有一个参数

如果没有参数                       () - >  System.out.print("");

如果有返回值 tvSensors.setOnTouchListener(( v, event) ->true);

如果返回值由方法返回               tvSensors.setOnTouchListener(( v, event) ->False());

如果返回值有多个要加上大括号 tvSensors.setOnTouchListener(( v, event) ->{ if(true) return false; else return true; }


基本上常用的就是这几种用法了,当然了还有其他一些用法,但是要说下,这只是作为了解实际开发中可以装下逼,面试装下逼,但是目前Android开发我好像还没见到人就这么写,所以如果团队开发大家没用Lambda 语法,你也别装逼用了,如果独立开发,比如像我,这么写也不会有人说的

这里给出Lambda 其他的用法

http://zhaochunqi.com/2016/11/15/java_lambda_expressions/

http://blog.csdn.net/ioriogami/article/details/12782141/


在Android Studio中虽然我们使用java1.8进行开发,还不可以使用Lambda,还需要进行配置下如下:



准备工作 jdk1.8以上,studio2.0以上,虽然不知道和stuido是否有关,但最好保持一致,我的studio是2.1.1

最简单的使用方式是在app的gradle中加一句

jackOptions.enabled = true
以及这句

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}
但是要注意了编译版本必须是24以上,否则写代码不会报错但是编译会报错

buildToolsVersion "24.0.0"

我把我的gradle配置上传到了github自己看下,很简单https://github.com/Itxupengfei/appbuildGradler

但是用我这种方式有种缺陷,就是部分功能无法使用

我看到有些人是使用依赖库在studio中使用Lambda语法,配置相对复杂一点点(其实一点也不复杂),但是用我这种完全就够用了简单方便快捷

这里给出第三方插件使用Lambda http://www.tuicool.com/articles/2yuiiyA

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值