如何在android中使用lambda表达式? 例如,我在IntelliJ IDEA中编译此代码:
package com.example.myapp;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
test s = () -> {return "Lambda expressions test";};
AlertDialog alertDialog = new AlertDialog.Builder(this)
.setTitle("Lambda expression")
.setMessage(s.t())
.create();
alertDialog.show();
}
}
interface test {
public String t();
}
但是有这个错误:
Information:Using javac 1.8.0_05 to compile java sources
Information:36 errors
Information:0 warnings
Information:Compilation completed with 36 errors and 0 warnings in 29 sec
Error:Android Dex: [myappі] UNEXPECTED TOP-LEVEL EXCEPTION:
Error:Android Dex: [myappі] com.android.dx.cf.iface.ParseException: InvokeDynamic not supported
如何设置以便使用lambda表达式?
答案 0 :(得分:7)
Android仅支持java 6和7.您可以使用插件获取lambdas,例如https://github.com/evant/gradle-retrolambda。
答案 1 :(得分:3)
在 build.gradle 中添加以下内容:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
假设您在计算机上安装了Java 8!
另外,添加:
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
classpath 'me.tatarka:gradle-retrolambda:2.5.0'
}
最后:
apply plugin: 'me.tatarka.retrolambda'
答案 2 :(得分:1)
Android构建系统现在支持Java 8语言功能
昨天,我们发布了Android Studio 2.4 Preview 6. Java 8语言 现在,javac / dx中的Android构建系统支持这些功能 编译路径。 Android Studio的Gradle插件现在不再使用Java 8了 类文件到Java 7兼容的类文件,所以你可以使用lambdas, 方法参考和Java 8的其他功能。
来源:https://android-developers.googleblog.com/2017/04/java-8-language-features-support-update.html
编辑: 06/01/2017
Android Studio 3.0现在支持Lambda Expressions