2014-06-13 39 views
5

如何在android中使用lambda表達式? 例如,我在IntelliJ IDEA的編譯此代碼:Android中的Lambda表達式

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(); 
} 

但是有這個erorrs:

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

的Android支持JAVA 6/7不是8我猜。在java 8中引入lambda我猜 – Raghunandan

+1

是的,lambda是在java 8中引入的,但是如果已經有很多代碼用lambda表達式寫入,我該怎麼辦? – user3430722

+0

@Raghunandan你錯了。如果您將您的build.gradle設置爲使用Java 8,Lambdas可以輕鬆在Android Studio中工作。 –

回答

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' 
1

的Java 8語言特性是由Android編譯系統支持

昨天,我們發佈的Android工作室2.4預覽6. Java 8語言 功能現在由javac/dx 01中的Android構建系統支持編譯路徑。 Android Studio中的搖籃插件現在desugars的Java 8個 類文件的Java 7兼容的類文件,所以你可以使用lambda表達式, 方法引用和其他功能的Java 8

來源https://android-developers.googleblog.com/2017/04/java-8-language-features-support-update.html

編輯: 2017年6月1日

Lambda表達式現在支持Android Studio中3.0