2014-06-13 26 views
5

Wie Lambda-Ausdrücke in Android verwenden? Zum Beispiel habe ich diesen Code in IntelliJ IDEA kompilieren:Lambda-Ausdrücke in android

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

Aber haben diese 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 

Wie so einrichten, können Sie Lambda-Ausdrücke verwenden?

+3

android Java unterstützt 6/7 nicht 8 ich denke. Lambda wird in Java eingeführt 8 ich denke, – Raghunandan

+1

ja, Lambda wird in Java 8 eingeführt, aber was kann ich tun, wenn es bereits eine Menge Code mit einem Lambda-Ausdruck geschrieben wird – user3430722

+0

@Raghunandan Sie liegen falsch. Lambdas funktionieren problemlos in Android Studio, wenn Sie build.gradle auf Java 8 eingestellt haben. –

Antwort

3

In Ihrem build.gradle hinzufügen:

compileOptions { 
    sourceCompatibility JavaVersion.VERSION_1_8 
    targetCompatibility JavaVersion.VERSION_1_8 
} 

Angenommen, Sie Java 8 auf Ihrem Rechner installiert!

Auch dieses Add:

dependencies { 
    classpath 'com.android.tools.build:gradle:1.0.0' 
    classpath 'me.tatarka:gradle-retrolambda:2.5.0' 
} 

Und schließlich:

apply plugin: 'me.tatarka.retrolambda' 
1

Java 8 Sprachfunktionen werden nun von der Android-Build-System unterstützt

Gestern veröffentlichten wir Android Studio 2.4 Vorschau 6. Java 8-Sprache Funktionen werden jetzt vom Android-Build-System im javac/dx 01 unterstütztKompilierpfad. Android Studio Gradle Plugin desugars jetzt Java 8 Class-Dateien zu Java 7-kompatibelen Klassendateien, so dass Sie lambda verwenden können, Methode Referenzen und weitere Merkmale von Java 8.er

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

Edit: 06/01/2017

Lambda-Ausdrücke jetzt in Android Studio unterstützt 3.0

Verwandte Themen