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

    xiaoxiao2021-04-11  35

    什么是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

    转载请注明原文地址: https://ju.6miu.com/read-666417.html

    最新回复(0)