欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

使用 Lambda 取代 Android 中的匿名类

程序员文章站 2024-03-05 22:53:07
lambda是第十一个希腊字母,大写λ,小写λ,额,跑题了…lambda表达式 是java8的新特性之一: lambda表达式 函数式接口 流api...

lambda是第十一个希腊字母,大写λ,小写λ,额,跑题了…lambda表达式 是java8的新特性之一:

  1. lambda表达式
  2. 函数式接口
  3. 流api
  4. 默认方法
  5. 新的date
  6. time api

lambda表达式 取代了匿名类 ,取消了模板,允许用函数式风格编写代码。

由于最近接触了rxjava,遇到了lambda,立马就喜欢上了~所以就学习了一下.

本文主要介绍一下lambda在android中替代匿名类的部分使用场景.

在android中使用lambda

gradle-retrolambda

a gradle plugin for getting java lambda support in java 6, 7 and android

在android中使用我们需要使用这个插件,按照配置配置完就行.

实战使用

由于lambda 可以取代匿名类,所以我们先来挑几个匿名类练练手.

这里先简单的提及一下lambda的语法:() -> {}咋一看可能觉得这个什么鬼啊?看不懂啊!

不急,看几个例子先~

设置监听事件

android中我们设置监听一般这么写:

mfab.setonclicklistener(new view.onclicklistener() {
   @override
   public void onclick(view v) {
    dosomething();
   }
  });

这么写as会提示说匿名类new view.onclicklistener()能被lambda代替:

使用 Lambda 取代 Android 中的匿名类

提示

那么用lambda可以如何写呢?

mfab.setonclicklistener(v->dosomething());

看到了么?

整个匿名内部类被v->dosomething()给代替了.

是不是非常简单?

ps: 本例子中的`v`代表onclick传递的参数v,参数不能省略,但是可以随意命名.

实现runnable

在android中我们起个线程一般这么写:

new thread(new runnable() {
   @override
   public void run() {
    dosomething();
   }
  }).start();

而使用lambda表达式的话可以这么写:

new thread(() -> dosomething()).start();

另外实例化runnable成员变量也可以这么写:

runnable runnable = ()->dosomething();

看完这两个例子是否对lambda感兴趣了呢?后续我还会继续学习,有兴趣的请继续关注~