美文网首页Android我的Android之路app
使用Lambda在Android中替代匿名类

使用Lambda在Android中替代匿名类

作者: 程序亦非猿 | 来源:发表于2015-09-01 22:28 被阅读5865次

Lambda

Lambda是第十一个希腊字母,大写Λ,小写λ,额,跑题了...
Lambda表达式 是Java8的新特性之一:

  1. Lambda表达式
  2. 函数式接口
  3. 流API
  4. 默认方法
  5. 新的Date 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可以如何写呢?

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感兴趣了呢?
后续我还会继续学习,有兴趣的请继续关注~

学习资料

http://www.importnew.com/16436.html
http://javarevisited.blogspot.sg/2014/02/10-example-of-lambda-expressions-in-java8.html

安利:
我的Github
我的微博
我的微信公众号:

微信公众号

相关文章

  • 使用Lambda在Android中替代匿名类

    Lambda Lambda是第十一个希腊字母,大写Λ,小写λ,额,跑题了...Lambda表达式 是Java8的新...

  • Java8 Lambda表达式

    1.替代匿名内部类 使用匿名内部类 使用lambda表达式 2.使用lambda表达式对集合进行迭代 3.使用la...

  • C#闭包陷阱

    在C#中,lambda(匿名委托)使用时,编译器会自动生成一个类来保存lambda中的方法以及字段,当lambda...

  • java - 学习笔记

    日期 匿名类 lambda stringBuffer stringBuilder 定时 日期 匿名类 lambda...

  • Android与Java8那些事

    Lambda表达式 Lambda定义 Why 当使用匿名类的时候,如果这个匿名类十分简单(例如只有一个接口),这样...

  • JAVA8 Lambda语法

    使用() -> {} 替代匿名类 条件:使用 @FunctionalInterface 修饰的接口

  • Java 8中的Lambda 和 Stream (from Ef

    42.Lambda 优先于匿名类   在之前的做法中(Historically),使用单个抽象方法的接口(或很少的...

  • C++11新特性--lambda

    匿名函数--lambda函数     匿名函数或者匿名类这种语法在其他语言(如lisp,java中)早有应用。在C...

  • kotlin中sam(函数式接口)

    用lambda表达式去表示java中的匿名类实例在使用java去给一个按钮设置监听我们通常会通过创建匿名类实例,如...

  • Kotlin中的sam(函数式接口)详解

    用lambda表达式去表示java中的匿名类实例在使用java去给一个按钮设置监听我们通常会通过创建匿名类实例,如...

网友评论

本文标题:使用Lambda在Android中替代匿名类

本文链接:https://www.haomeiwen.com/subject/iqrlcttx.html