android如何使用lambda表达式?

2025-05-04 20:20:33
推荐回答(2个)
回答1:

  在Java8之前,Java并不支持Lambda表达式,而Android目前最新也才支持到Java7特性,所以在Android中使用Lambda表达式需要进行一些处理,将Lambda表达式编译成Android可以“理解”的方式。
  Retrolambda是一个能够让我们在Java7中使用Lambda的工具,再通过gradle-retrolambda插件,在gradle编译过程中将会:
  将Java8中的 javac编译 Java8的代码;
  将产生的Java8的字节码转换为Java6的字节码;
  重新打包class。
  build.gradle配置文件如下:
  buildscript {
  repositories {
  mavenCentral()
  maven {
  url "https://oss.sonatype.org/content/repositories/snapshots"
  }
  }
  dependencies {
  classpath 'me.tatarka:gradle-retrolambda:1.2.+'
  }
  }
  // Required because retrolambda is on maven central
  repositories {
  mavenCentral()
  }
  apply plugin: 'android'
  apply plugin: 'retrolambda'
  也可以添加如下设置:
  retrolambda {
  jdk System.getenv("JAVA8_HOME")
  javaVersion JavaVersion.VERSION_1_6
  }
  android {
  compileOptions {
  sourceCompatibility JavaVersion.VERSION_1_8
  targetCompatibility JavaVersion.VERSION_1_8
  }
  }
  从此以后,
  strings.map(new Func1() {
  @Override
  public Integer call(String s) {
  return s.length();
  }
  });
  可以写作:
  strings.map((String s) -> {
  return s.length();
  });
  至于详细的bytecode转换过程,有兴趣的同志们可以自己研究研究。

回答2:

Android暂时还不能用,如果在Androidstudio中使用的话,会有提示“lambdaexpressionarenotsupportedatthislanguagelevel”。因为lambda是在java8引进的。