Android中使用Lambda表达式
来源:互联网 发布:php 在线人数统计 编辑:程序博客网 时间:2024/05/24 07:30
Lambda ,如果不知道怎么读,那λ怎么读吧,它是Java1.8 新增的特性,详细介绍请看这里:Java 8简明教程。
lambda表达式取代了匿名内部类,取消了模板,允许程序猿用函数式风格编写代码,使代码可读性更高,尽管刚开始你会看不懂,但是你应该尝试,毕竟这是新的东西,我已从中获益。
格式
基本格式是:() -> {}
有下面三种具体表达:
- (params) -> expression
- (params) -> statement
- (params) -> {statement}
这个新的特性是激动人心的,那么有个问题,怎么用,是啊,很多东西我们都懂,但为什么还是过不好这一生,说远了,问题的关键是:用,得用,你还得会用。
lambda使用举例
as里的配置
要使用lambda,首先必须配置编译环境,这里使用的android studio,as默认的jdk版本是1.6,修改成1.8即可使用,这里确保你系统安装了jdk1.8,否则需要用到下面插件:gradle-retrolambda
as里的配置有两种方法:
配置gradle脚本
在build.gradle脚本中添加下列代码:
android { compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 }}
当然写成下面的样子也是可以的
android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }}
设置项目结构
按快捷键Ctrl+Shift+Alt+S进入项目结构设置,把app的jdk版本修改成1.8,注意你需要填写1.8,因为那个下拉菜单里没有这一选项,如下:
这里采用的是第二种方法,然后项目自动同步。
同步后是会在build.gradle脚本下生成和上面一样的东东:
举例
点击按钮触发事件
传统的点击事件,应用匿名内部类:
Button button = (Button) findViewById(R.id.btn_insert); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "hello", Toast.LENGTH_LONG).show(); } });
通过上面设置jdk版本为1.8后,鼠标放到new View.OnClickListener()里会有下面提示:
然后我们按快捷键Alt+Enter,是这样的
继续回车后,见证奇迹的时刻到来lo。。。
使用lambda表达式之后是这样的
Button button = (Button) findViewById(R.id.btn_insert);button.setOnClickListener(v -> Toast.makeText(MainActivity.this, "hello", Toast.LENGTH_LONG).show());
一行代码就搞定了,清晰可见,把行为传到了函数里,这里注意v不可省略,是函数onClick的参数,当然就可以是任意名字,我还是建议就用一个字母表示,简单嘛,当然了首先你得知道她的意思,尽管她的很多行为你始终不会明白,哈哈。
实现Runnable接口
传统实现Runnable接口是这样的:
new Thread(new Runnable() { @Override public void run() { Log.i("TAG", "haha"); }}).start();
使用lambda表达式之后是这样的:
new Thread(() -> { Log.i("TAG", "haha");}).start();
哇哦,是不是有种很清爽的感觉,乍一看,这是什么鬼,仔细分析后是用了lambda表达式() -> {},哈哈,简单的爱,这是程序员懒惰的一种体现,可以写出更简洁高校的代码,赞一个。
比较
既然lambda表达式即将正式取代Java代码中的匿名内部类,那么有必要对二者做一个比较分析。
第一个关键的不同点就是关键字 this。匿名类的 this 关键字指向匿名类,而lambda表达式的 this 关键字指向包围lambda表达式的类。
第二是编译方式。Java编译器将lambda表达式编译成类的私有方法。使用了Java 7的 invokedynamic 字节码指令来动态绑定这个方法。
总结
lambda表达式还有很多用法,比如迭代器,详细用法请参考这里:Java8 lambda表达式10个示例
- Android 中使用Lambda表达式
- Android中使用lambda表达式
- Android中使用lambda表达式
- Android 中使用lambda表达式
- Android 中使用Lambda表达式
- Android 中使用Lambda表达式
- Android中使用Lambda表达式
- Android Studio中使用Lambda表达式
- android studio 中使用lambda表达式
- 在Android Studio中使用Lambda表达式
- 在Android Studio中使用Lambda表达式
- Android Studio 中使用 Lambda表达式
- Android Studio中使用Lambda表达式
- Android Studio中使用Lambda表达式
- android studio 中使用lambda表达式
- Android Studio中使用lambda表达式
- Android中使用Lambda表达式高效开发
- android中lambda表达式使用示例
- [Leetcode] 304. Range Sum Query 2D
- 让登陆按钮不被软件盘遮挡的一种方法
- lombok @EqualsAndHashCode 注解的影响
- 22. Generate Parentheses
- GC
- Android中使用Lambda表达式
- bootstrap+angular+ssm整合(下)
- 大型网站架构系列:负载均衡详解(3)
- 阿里云9块9 LAMP&JAVA运行环境搭建
- Python环境搭建
- 树莓派安装QT5+OPENCV-2.4.9学习笔记
- poj 3449 判断许多个几何图形是否相交
- MFC子窗口和父窗口(SetParent,SetOwner)
- 2-SAT DFS暴力求最小字典序的模板(Peaceful Commission)