引入Lambda

作者: CokeNello | 来源:发表于2016-11-03 15:20 被阅读71次

1.参考

参考链接1

2.简介

Lambda是为了使你的代码简洁!
由传统的OnClick写法:

button.setOnClickListener(new View.OnClickListener() {
      @Override public void onClick(View v) {}
});

使用Lambda语法后:
button.setOnClickListener(v -> {});

3.用法:

其有多种形式,主要是由传入参数,和主体代码(就是{}里面代码是不是只有一行)所决定!

  • 不包含参数,并且返回值为void
    new Thread(()->{}).start();

  • 一个参数,并且主体为一个表达式
    button.setOnClickListener(v -> Log.d("tag", "click"));
    当然,你写成:button.setOnClickListener(v -> {Log.d("tag", "click")});也是可以的,不过前者比较简洁。

  • 一个参数,并且主体为一段代码块。这时候必须用大活好。

button.setOnClickListener(v -> {
  Log.d("tag", "click");
  Log.d("tag", "click");
}
});
  • 多个参数的方法,你既可以显示声明变量参数类型,也可以啥都不写依靠编译器推断得出。如果显示声明,那么就需要用括号将参数括起来
    listview.setOnitemClickListener((parent, view, position, id) -> {})
    或者:
    listview.setOnitemClickListener((AdapterView<?> parent, View view, int position, long id) -> {})

4.函数式接口

函数接口是只有一个抽象方法的接口,这点一定要搞清楚,只有符合上述条件,才可以用作Lambda表达式类型,2个3个抽象方法的接口是不能玩的,感觉这玩意就是为了Lambda而生的,也可能是反过来吧,哈哈。

5.最后,Android Studio怎么支持JDK8?

现在Android Studio还没支持JDK8,目前只能酱紫做去支持:
导入详情:点我!

  • Download and install jdk8.

  • Add the following to your project’s main build.gradle(也就是在你的Project下的build.grale)

buildscript {
  repositories {
     mavenCentral()
  }

  dependencies {
     classpath 'me.tatarka:gradle-retrolambda:3.2.3'
  }
}
  • Now add this to your application module’s build.gradle(在模块的build.gradle,每个模块都要,包括app模块。)
apply plugin: 'com.android.application' // or apply plugin: 'java'
apply plugin: 'me.tatarka.retrolambda'
  • Add these lines to your application module’s build.gradle to inform the IDE of the language level:(在app模块下)
android {
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

相关文章

网友评论

    本文标题:引入Lambda

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