2013-02-11 10 views
56

Ich verstehe, dass das "Java" in einem dalvik vm in Bezug auf API und Architektur usw. von Java unterscheidet. Aber die Syntax war immer die gleiche. (Bitte korrigieren Sie mich, wenn ich falsch liege)wird Android Java Lambda-Ausdruck in Java 8 unterstützen?

Jetzt wird die Unterstützung von lambda expression in java 8 wird freigegeben werden, wird Android Java folgen? Hat Google oder AOsp versprochen, dalvik konsistent mit Java zu machen?

AKTUALISIERUNG: Jetzt wie in Android 4.4 Kit Kat (API 19), wurde die Java 7-Syntax OFFIZIELL unterstützt. Source from android.com

+0

Vorbehalt. Ich weiß es nicht - aber müsste sich die VM ändern? Wie ich es verstehe, sind Lambdas nur dem Compiler bekannt. Unter dem Deckmantel ist es nur eine Art, eine anonyme Methode auszudrücken - ich denke ... Versuchen Sie das - http://www.lambdafaq.org/ Die große Veränderung besteht darin, alle Generika zu unterstützen. – Simon

+16

Warum ist fast jede Frage, die ich auf SO interessant finde, geschlossen? Gibt es einen bizarren Wettbewerb um die maximale Anzahl von Fragen zu schließen? –

+1

@RossJudson - Das Problem ist, dass die meisten der "interessanten" Fragen diejenigen sind, für die es keine wirkliche objektive Antwort gibt. Das Ziel von SO besteht darin, objektive Antworten zu geben ... nicht "Debatten, Argumente, Meinungsumfragen oder ausgedehnte Diskussionen zu erbitten". Und nein, es gibt keinen Wettbewerb. Und nein ... das Abstimmen von Fragen erhöht nicht Ihren Ruf. –

Antwort

32

Android verwendet keine Java SE-Versionen von Oracle, it's based on parts of the Apache Harmony project, so dass es Java 7 nicht unterstützt. Harmony wird nicht mehr aktiv entwickelt und unterstützt nicht 1.7.

Wenn sich Google nicht dazu entschließt, Harmony und das Android SDK auf eine neuere Java-Version zu aktualisieren, werden in Java keine Java 7- oder Java 8-Funktionen verfügbar sein - selbst wenn neue Funktionen nur syntaktisch sind. Sie könnten eine alternative Implementierung wie die OpenJDK verwenden, obwohl ich keine Pläne dafür weiß. Einige Leute denken, dass der Einsatz von OpenJDK aufgrund von Klagen zwischen Google und Oracle unwahrscheinlich ist.


Some features of Java 7, bemerkenswerteste: Diamant Betreiber, Multi-Catch, String-Schalter und in Android N auch some Java 8 features wie Lambda-Ausdrücke in Android umgesetzt wurde, da diese Antwort geschrieben wurde. (Danke an Ross und Stefan für die Erwähnung in den Kommentaren).

Google muss diese Funktionen aus eigener Kraft implementieren, und es scheint, dass die Wahl hauptsächlich für die beliebtesten Funktionen getroffen wird.

+5

Aktuelle Android SDKs haben diese Antwort falsch wiedergegeben. Java 7-Syntax wird unterstützt. –

+3

Einige Java 7-Funktionen sind jetzt verfügbar. Der Kernpunkt ist immer noch: Google kann nicht ohne großen Aufwand auf Java 8 umsteigen und muss diese Funktionen selbst implementieren. Sie haben beschlossen, dies für Teile von Java 7 zu tun, aber es scheint, dass sie noch immer keine Pläne zur Unterstützung von Java 8 kommunizieren. Hier ist eine andere Frage zu diesem Thema mit einer ausgezeichneten Antwort: http://StackOverflow.com/q/16921337/897024 – Kapep

+4

Android N wechselt zu OpenJDK. Das Paket java.util.function wurde heute in den AOSP-libcore-Master integriert. Dazu gehören Schnittstellenstandardmethoden und die Verwendung von Lambda-Ausdrücken. Ein kurzer Blick auf dieses AOSP toolchain/jack commit deutet darauf hin, dass der neue "Jack" -Compiler tatsächlich Lambda-Ausdrücke umschreiben kann: http: // bit.ly/1KUvqm6 Meiner Kenntnis nach basiert der Sammlungscode im Git-Master immer noch auf OpenJDK 7. Also, noch keine Anzeichen einer Stream-API. –