android中的Lambda表达式

时间:2014-06-13 18:02:49

标签: android intellij-idea lambda

如何在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表达式?

3 个答案:

答案 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