2014-06-13 17 views
5

Jak używać wyrażeń lambda w Androidzie? Na przykład, mogę skompilować ten kod w IntelliJ IDEA:Wyrażenia lambdy w Androidzie

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

Ale ma to 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 

Jak skonfigurować tak można użyć wyrażenia lambda?

+3

Android obsługuje java 6/7 nie 8 myślę. lambda jest wprowadzona w java 8 i tak – Raghunandan

+1

tak, lambda jest wprowadzona w java 8, ale co mogę zrobić, jeśli jest już napisane dużo kodu z wyrażeniem lambda – user3430722

+0

@Raghunandan Mylisz się. Lambdas działa z łatwością w Android Studio, jeśli ustawisz swój build.gradle na język Java 8. –

Odpowiedz

3

W swojej build.gradle dodać to:

compileOptions { 
    sourceCompatibility JavaVersion.VERSION_1_8 
    targetCompatibility JavaVersion.VERSION_1_8 
} 

Zakładając, że zainstalowana Java 8 na komputerze!

również dodać to:

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

i wreszcie:

apply plugin: 'me.tatarka.retrolambda' 
1

Java 8 funkcje językowe są teraz obsługiwane przez Android systemu kompilacji

Wczoraj wydaliśmy Android Studio 2.4 Podgląd 6. Funkcje języka Java 8 w języku są teraz obsługiwane przez system kompilacji systemu Android w javac/dx ścieżka kompilacji. Gradle wtyczki Android Studio teraz desugars Javy 8 plików klas Java plików klas 7-kompatybilne, dzięki czemu można używać lambdy, referencje sposób i inne cechy Java 8.

Źródło: https://android-developers.googleblog.com/2017/04/java-8-language-features-support-update.html

Edit: 06/01/2017

Lambda Expressions teraz obsługiwane w Android Studio 3.0